如何在流媒体播放器上使用seekbar?

时间:2018-08-30 18:44:47

标签: android android-mediaplayer seekbar android-seekbar

我正在开发一个在线广播应用程序,因此尝试像tunein一样为其实现搜索栏。由于无法使用MediaPlayer的.getDuration()方法,因此给了搜索栏一个最大值。

我成功实现了它,但是当我尝试移动搜索栏时,它又回到了先前的位置,因此播放/暂停按钮停止工作了。

此处是摘要代码

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio);

        handler = new Handler(); //for seekbar
        seekBar = (SeekBar) findViewById(R.id.seekBar);

                    mediaPlayer = new MediaPlayer();
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    new PlayerTask().execute(radioLink);

playButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            if (started) {
                                started = false;
                                mediaPlayer.pause();
                                playButton.setImageResource(R.drawable.pplay);
                            } else {
                                started = true;
                                mediaPlayer.start();
                                playButton.setImageResource(R.drawable.ppause);
                            }

                        }
                    });


        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
                if(b)
                {
                 mediaPlayer.seekTo(i);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });


    }



class PlayerTask extends AsyncTask<String, Void, Boolean> {
        @Override
        protected Boolean doInBackground(String... strings) {
            try {
                mediaPlayer.setDataSource(strings[0]);
                mediaPlayer.prepare();
                prepared = true;
            } catch (IOException e) {
                e.printStackTrace();
            }

            return prepared;

        }

        @Override
        protected void onPostExecute(Boolean aBoolean) {
            super.onPostExecute(aBoolean);
            loadingSoundtxt.setVisibility(View.GONE);
            playButton.setVisibility(View.VISIBLE);
            seekBar.setMax(1800000); //30mins in milliseconds
            mediaPlayer.start();
            changeSeekbar();


        }
    }

        private void  changeSeekbar(){
            seekBar.setProgress(mediaPlayer.getCurrentPosition());
            if (mediaPlayer.isPlaying())
            {
                runnable = new Runnable() {
                    @Override
                    public void run() {
                        changeSeekbar();
                    }
                };
                handler.postDelayed(runnable, 1000);
            }
        }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mediaPlayer != null) mediaPlayer.release();
    }
}

0 个答案:

没有答案