Android的音频搜索栏 [英] Android Audio SeekBar

查看:211
本文介绍了Android的音频搜索栏的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创造的东西在一个单一的音频文件播放,可暂停和操纵带有进度/搜索栏。我想有一个图像占用大部分屏幕,然后在底部的播放暂停按钮左和杆的按钮的右侧。一切正常,未链接到音频的搜索栏。我的进度条编码是一种可能,因为如果从几个拍摄它,我已经看到了在互联网上一片狼藉,但他们大多是困惑我,因为他们是音乐播放器应用程式不适合打单的音频文件。

可能有人请帮助我的进度条?对提高我的编程其他任何提示将是巨大的。

(我很新到Android和编程只是警告你)

这是我的Java:

 的MediaPlayer媒体播放器;
    按钮buttonPlayPause;
    ImageView的图像;
    搜索栏搜索栏;    私人诠释stateMediaPlayer;
    私人最终诠释stateMP_NotStarter = 0;
    私人最终诠释stateMP_Playing = 1;
    私人最终诠释stateMP_Pausing = 2;
    INT总;    / **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.playerwere);        图像=(ImageView的)findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);        搜索栏=(搜索栏)findViewById(R.id.seekBar);        buttonPlayPause =(按钮)findViewById(R.id.playpause);        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);        seekBar.setOnSeekBarChangeListener(seekBarOnSeekListener);        initMediaPlayer();        螺纹currentThread =新主题(本);
        currentThread.start();    }    私人无效initMediaPlayer(){
        媒体播放器=新的MediaPlayer();
        媒体播放器= MediaPlayer.create(were.this,R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;        mediaPlayer.setOn preparedListener(新在preparedListener(){            @覆盖
            在prepared(MediaPlayer的为arg0)公共无效{
                // TODO自动生成方法存根
                总= mediaPlayer.getDuration();
            }        });        seekBar.setProgress(0);
        seekBar.setMax(总);
    }    Button.OnClickListener buttonPlayPauseOnClickListener =新Button.OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            开关(stateMediaPlayer){
            案例stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            案例stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                打破;
            案例stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            }        }
    };    SeekBar.OnSeekBarChangeListener seekBarOnSeekListener =新SeekBar.OnSeekBarChangeListener(){        @覆盖
        公共无效onStopTrackingTouch(搜索栏搜索栏){
            // TODO自动生成方法存根        }        @覆盖
        公共无效onStartTrackingTouch(搜索栏搜索栏){
            // TODO自动生成方法存根        }        @覆盖
        公共无效onProgressChanged(搜索栏搜索栏,INT进步,
                布尔FROMUSER){
            // TODO自动生成方法存根            如果(FROMUSER){
                mediaPlayer.seekTo(进度);
                seekBar.setProgress(进度);
            }        }
    };    @覆盖
    公共无效的run(){
        // TODO自动生成方法存根        尝试{
            而(媒体播放器!= NULL){
                INT currentPosition = mediaPlayer.getCurrentPosition();
                消息味精=新的Message();
                msg.what = currentPosition;
                threadHandler.sendMessage(MSG);
            }
            视频下载(100);
        }赶上(InterruptedException的E){
            e.printStackTrace();
        }
    }    私人处理程序threadHandler =新的处理程序(){
        公共无效的handleMessage(消息MSG){
            seekBar.setProgress(msg.what);
        }
    };

这是我的Java是在我试图使用搜索栏:

 的MediaPlayer媒体播放器;
    按钮buttonPlayPause;
    ImageView的图像;    私人诠释stateMediaPlayer;
    私人最终诠释stateMP_NotStarter = 0;
    私人最终诠释stateMP_Playing = 1;
    私人最终诠释stateMP_Pausing = 2;    / **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.playerwere);        图像=(ImageView的)findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);        buttonPlayPause =(按钮)findViewById(R.id.playpause);        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);        initMediaPlayer();    }    私人无效initMediaPlayer(){
        媒体播放器=新的MediaPlayer();
        媒体播放器= MediaPlayer.create(were.this,R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
    }    Button.OnClickListener buttonPlayPauseOnClickListener =新Button.OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            开关(stateMediaPlayer){
            案例stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            案例stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                打破;
            案例stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            }        }
    };

这是我的Java维沙尔VAJA的回答后:

 的MediaPlayer媒体播放器;
    按钮buttonPlayPause;
    ImageView的图像;
    搜索栏搜索栏;
    处理程序处理程序;    私人诠释stateMediaPlayer;
    私人最终诠释stateMP_NotStarter = 0;
    私人最终诠释stateMP_Playing = 1;
    私人最终诠释stateMP_Pausing = 2;
    私人诠释mediaPos;
    私人诠释mediaMax;    / **当第一次创建活动调用。 * /
    @覆盖
    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.playerwere);        图像=(ImageView的)findViewById(R.id.pdfview);        Image.setImageResource(R.drawable.wereim);        搜索栏=(搜索栏)findViewById(R.id.seekBar);        buttonPlayPause =(按钮)findViewById(R.id.playpause);        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);        seekBar.setOnSeekBarChangeListener(seekBarOnSeekChangeListener);        initMediaPlayer();    }    私人无效initMediaPlayer(){
        处理器=新的处理程序();
        媒体播放器=新的MediaPlayer();
        媒体播放器= MediaPlayer.create(were.this,R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
        mediaPos = mediaPlayer.getCurrentPosition();        mediaMax = mediaPlayer.getDuration();        seekBar.setMax(mediaMax); //设置的最大范围
                                    // seekBar.setProgress(mediaPos); //设置
                                    //目前的进度,以歌曲的        handler.removeCallbacks(moveSeekBarThread);
        handler.postDelayed(moveSeekBarThread,100);
    }    私人Runnable接口moveSeekBarThread =新的Runnable(){        公共无效的run(){
            如果(mediaPlayer.isPlaying()){                INT mediaPos_new = mediaPlayer.getCurrentPosition();
                INT mediaMax_new = mediaPlayer.getDuration();
                seekBar.setMax(mediaMax_new);
                seekBar.setProgress(mediaPos_new);                handler.postDelayed(此,100); //循环线程0.1后
                                                //第二
                                                //秒
            }
        }
    };    Button.OnClickListener buttonPlayPauseOnClickListener =新Button.OnClickListener(){        @覆盖
        公共无效的onClick(视图v){
            // TODO自动生成方法存根
            开关(stateMediaPlayer){
            案例stateMP_NotStarter:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            案例stateMP_Playing:
                mediaPlayer.pause();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                打破;
            案例stateMP_Pausing:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                打破;
            }        }
    };    SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener =新SeekBar.OnSeekBarChangeListener(){        @覆盖
        公共无效onStopTrackingTouch(搜索栏搜索栏){
            // TODO自动生成方法存根        }        @覆盖
        公共无效onStartTrackingTouch(搜索栏搜索栏){
            // TODO自动生成方法存根        }        @覆盖
        公共无效onProgressChanged(搜索栏搜索栏,INT进步,
                布尔FROMUSER){
            // TODO自动生成方法存根            如果(FROMUSER){
                mediaPlayer.seekTo(进度);
                seekBar.setProgress(进度);
            }        }
    };


解决方案

我觉得这可以为你的工作。

创建一个线程,将检查首歌位置,将移动搜索栏这样的,

 私人的Runnable moveSeekBarThread =新的Runnable(){    公共无效的run(){
        如果(mediaPlayer.isplaying){        INT mediaPos_new = mediaPlayer.getCurrentPosition();
        INT mediaMax_new = mediaPlayer.getDuration();
        seekBar.setMax(mediaMax_new);
        seekBar.setProgress(mediaPos_new);        handler.postDelayed(此,100); //循环线程0.1秒后
                                        //秒
        }
    }
};

并调用线程这样,

  mediaPos = mediaPlayer.getCurrentPosition();
  mediaMax = mediaPlayer.getDuration();  seekBar.setMax(mediaMax); //设置的最大范围
  seekBar.setProgress(mediaPos); //设置当前的进度,这首歌的  handler.removeCallbacks(moveSeekBarThread);
  handler.postDelayed(moveSeekBarThread,100);

I'm trying to create something where a single audio file is played and can be paused and manipulated with a progress/seek bar. I want to have an image taking up most of the screen and then a play pause button on the bottom left and the bar to the right of the button. Everything works the seekbar which isn't link to the audio. My progress bar coding is a probably a mess because if taken it from several i've seen on the internet but they are mostly confusing for me as they are for music player apps not for playing a single audio file.

Could someone please help me with the progress bar? Any other tips on improving my programming would be great too.

(I am very new to android and programming just to warn you)

This is my Java:

MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;
    SeekBar seekBar;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;
    int total;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);

        seekBar = (SeekBar) findViewById(R.id.seekBar);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        seekBar.setOnSeekBarChangeListener(seekBarOnSeekListener);

        initMediaPlayer();

        Thread currentThread = new Thread(this);
        currentThread.start();

    }

    private void initMediaPlayer() {
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;

        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer arg0) {
                // TODO Auto-generated method stub
                total = mediaPlayer.getDuration();
            }

        });

        seekBar.setProgress(0);
        seekBar.setMax(total);
    }

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

    SeekBar.OnSeekBarChangeListener seekBarOnSeekListener = new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub

            if (fromUser) {
                mediaPlayer.seekTo(progress);
                seekBar.setProgress(progress);
            }

        }
    };

    @Override
    public void run() {
        // TODO Auto-generated method stub

        try {
            while (mediaPlayer != null) {
                int currentPosition = mediaPlayer.getCurrentPosition();
                Message msg = new Message();
                msg.what = currentPosition;
                threadHandler.sendMessage(msg);
            }
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private Handler threadHandler = new Handler() {
        public void handleMessage(Message msg) {
            seekBar.setProgress(msg.what);
        }
    };

And this is what my java was before i tried to use the seekBar:

    MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);
        Image.setImageResource(R.drawable.wereim);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        initMediaPlayer();

    }

    private void initMediaPlayer() {
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
    }

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
    buttonPlayPause.setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

This is my java after Vishal Vaja's answer:

MediaPlayer mediaPlayer;
    Button buttonPlayPause;
    ImageView Image;
    SeekBar seekBar;
    Handler handler;

    private int stateMediaPlayer;
    private final int stateMP_NotStarter = 0;
    private final int stateMP_Playing = 1;
    private final int stateMP_Pausing = 2;
    private int mediaPos;
    private int mediaMax;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.playerwere);

        Image = (ImageView) findViewById(R.id.pdfview);

        Image.setImageResource(R.drawable.wereim);

        seekBar = (SeekBar) findViewById(R.id.seekBar);

        buttonPlayPause = (Button) findViewById(R.id.playpause);

        buttonPlayPause.setOnClickListener(buttonPlayPauseOnClickListener);

        seekBar.setOnSeekBarChangeListener(seekBarOnSeekChangeListener);

        initMediaPlayer();

    }

    private void initMediaPlayer() {
        handler = new Handler();
        mediaPlayer = new MediaPlayer();
        mediaPlayer = MediaPlayer.create(were.this, R.raw.were);
        stateMediaPlayer = stateMP_NotStarter;
        mediaPos = mediaPlayer.getCurrentPosition();

        mediaMax = mediaPlayer.getDuration();

        seekBar.setMax(mediaMax); // Set the Maximum range of the
                                    // seekBar.setProgress(mediaPos);// set
                                    // current progress to song's

        handler.removeCallbacks(moveSeekBarThread);
        handler.postDelayed(moveSeekBarThread, 100);
    }

    private Runnable moveSeekBarThread = new Runnable() {

        public void run() {
            if (mediaPlayer.isPlaying()) {

                int mediaPos_new = mediaPlayer.getCurrentPosition();
                int mediaMax_new = mediaPlayer.getDuration();
                seekBar.setMax(mediaMax_new);
                seekBar.setProgress(mediaPos_new);

                handler.postDelayed(this, 100); // Looping the thread after 0.1
                                                // second
                                                // seconds
            }
        }
    };

    Button.OnClickListener buttonPlayPauseOnClickListener = new Button.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (stateMediaPlayer) {
            case stateMP_NotStarter:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            case stateMP_Playing:
                mediaPlayer.pause();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_play);
                stateMediaPlayer = stateMP_Pausing;
                break;
            case stateMP_Pausing:
                mediaPlayer.start();
                buttonPlayPause
                        .setBackgroundResource(android.R.drawable.ic_media_pause);
                stateMediaPlayer = stateMP_Playing;
                break;
            }

        }
    };

    SeekBar.OnSeekBarChangeListener seekBarOnSeekChangeListener = new SeekBar.OnSeekBarChangeListener() {

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
            // TODO Auto-generated method stub

        }

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
            // TODO Auto-generated method stub

            if (fromUser) {
                mediaPlayer.seekTo(progress);
                seekBar.setProgress(progress);
            }

        }
    };

解决方案

I think this can be work for you.

Create one thread that will check song position and will move seekbar like this,

private Runnable moveSeekBarThread = new Runnable() {

    public void run() {
        if(mediaPlayer.isplaying){

        int mediaPos_new = mediaPlayer.getCurrentPosition();
        int mediaMax_new = mediaPlayer.getDuration();
        seekBar.setMax(mediaMax_new);
        seekBar.setProgress(mediaPos_new);

        handler.postDelayed(this, 100); //Looping the thread after 0.1 second
                                        // seconds
        }  
    }
};

And call that thread like this,

  mediaPos = mediaPlayer.getCurrentPosition();
  mediaMax = mediaPlayer.getDuration();

  seekBar.setMax(mediaMax); // Set the Maximum range of the
  seekBar.setProgress(mediaPos);// set current progress to song's

  handler.removeCallbacks(moveSeekBarThread);
  handler.postDelayed(moveSeekBarThread, 100);

这篇关于Android的音频搜索栏的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆