Как создать панель поиска из того места, где был приостановлен медиаплеер? - PullRequest
0 голосов
/ 28 марта 2020

У меня есть одна панель поиска и кнопка, используемая для воспроизведения / паузы. принцип функционален, когда я нажимаю кнопку, она начинает играть, и во второй раз, когда я нажимаю, она приостанавливает медиаплеер (идеально). Проблема в том, что когда я снова нажимаю, чтобы продолжить чтение, чтение начинается снова с начала, а не с того места, где оно было приостановлено. Пожалуйста, направьте меня, вот мой код:

PLAY_SONG

private void play_songs() {
mediaPlayer = new MediaPlayer();

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

        mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
                .setUsage(AudioAttributes.USAGE_MEDIA)
                .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                .setLegacyStreamType(AudioManager.STREAM_MUSIC)
                .build());

    } else {

        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
    }
    try {
        Log.d("VERIFIONS link ", "CHANGEONS MESSAGE" + link);

        mediaPlayer.setDataSource(loc);

        Log.d("APRES SETSOURCE ", "APRES SETSOURCE" );
        mediaPlayer.prepare();
        Log.d("APRES PREPARE ASYNC", "APRES PREPARE ASYNC" );
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                seekbar.setMax(mp.getDuration());
                int tailleduseekbarre = mp.getDuration();
                Log.d("DANS ON PREPARE", "DANS ON PREPARE" );
                //mp.start();
                Log.d("APRES MP START ", "APRES MP START" );
                Toast.makeText(context, "en lecture", Toast.LENGTH_SHORT).show();
                //Log.d(" TAG DURATION", " VRIFIONS LA DUREE " + mp.getDuration());
                Log.d(" TAG tailleduseekbar", " VRIFIONS LA DUREE tailleduseekbar" + tailleduseekbarre);
            }
        });

        mediaPlayer.start();
        PlayCycle();

        seekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                if (mediaPlayer != null && fromUser) {
                    mediaPlayer.seekTo(mediaPlayer.getCurrentPosition());
                    //seekBar.setProgress(progress);
                }
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
        mediaPlayer.setOnCompletionListener (new MediaPlayer.OnCompletionListener () {
            @Override public void onCompletion (MediaPlayer mp) {

                mediaPlayer.seekTo(0);
            }
        });


    } catch (IOException e) {

    e.printStackTrace();
    Log.d("Prepare failed.: status", " ALORS" + equals(e.getMessage()));
    Log.d("Catch De play song", "message " + e.getMessage());
    }


}

PLAY_CYCLE

private void PlayCycle() {

    seekbar.setProgress(mediaPlayer.getCurrentPosition());
    Log.d(" POSITION ", "MEDIAPLAYER POSITION" + mediaPlayer.getCurrentPosition());
    CurrentTimer2.setText(millisecondToTimer(mediaPlayer.getCurrentPosition()));
    if (mediaPlayer.isPlaying()) {

        Log.d("Dans le run"," DANS LE RUN");

        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                    PlayCycle();
                // This code will always run on the UI thread, therefore is safe to modify UI elements.
            }
        };

        handler.postDelayed(runnable, 100);
    }

} 

ТАМ, ГДЕ ВЫЗОВ МЕТОД PLAY_SONG

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                //Download();

                 if(mediaPlayer.isPlaying()){
                     mediaPlayer.pause();
                     seekbar.setProgress(mediaPlayer.getCurrentPosition());
                }else{
                     //seekbar.setProgress(mediaPlayer.getCurrentPosition());
                     play_songs();

                     Toast.makeText(context, "Handle pause", Toast.LENGTH_SHORT).show();
                 }
            }
        });

Спасибо

...