У меня есть одна панель поиска и кнопка, используемая для воспроизведения / паузы. принцип функционален, когда я нажимаю кнопку, она начинает играть, и во второй раз, когда я нажимаю, она приостанавливает медиаплеер (идеально). Проблема в том, что когда я снова нажимаю, чтобы продолжить чтение, чтение начинается снова с начала, а не с того места, где оно было приостановлено. Пожалуйста, направьте меня, вот мой код:
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();
}
}
});
Спасибо