Как использовать seekbar на потоковом медиаплеере? - PullRequest
0 голосов
/ 30 августа 2018

Я работаю над приложением онлайн-радио, и я попытался внедрить в него панель поиска, например, 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();
    }
}
...