Ich habe eine SeekBar
und eine MediaPlayer
. Ich will versuchen, während es angehalten, aber scheint, dass docs mir liegt:Pause und suchen in Android MediaPlayer
Bitte beachten Sie, dass seekTo (int) können auch in den anderen Staaten genannt werden, wie Fertig-, Paused und PlaybackCompleted Zustand.
Wie üblich auf Android Ich habe Abhilfen statt Code zu schreiben (und in welchem Zustand ist MediaPlayer
zu diesem Zeitpunkt kann ich nicht wissen, so dass in diese Tabelle und die Zustandsmaschine ist völlig nutzlos). Denn statt onSeekComplete
onCompletion
(über 9000 mal, ich mache keine Witze) Methode heißt! onSeekComplete
wird nur nach dem Aufruf seekTo
von onPrepared
aufgerufen (WARUM, GOTT, WARUM ???). Ich weiß nicht einmal, was ich tun soll. Ich habe ungefähr 5 Stunden damit verbracht und nichts ist behoben. Was kann ich tun?
UPD
Hier ist mein Code.
private void setupMediaPlayer() {
savedMediaPlayerState = null;
mediaPlayer = application.getMediaPlayer();
String mp3Path = "/path/to/mp3";
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setDataSource(mp3Path);
mediaPlayer.prepare();
}
@Override
public void onProgressChanged(android.widget.SeekBar sb, int i, boolean b) {
Log.i(TAG, String.format("Progress changed! %d", i));
if (b) {
mediaPlayer.seekTo(i);
updateProgressBarAndDurationLabels(i, mediaPlayer.getDuration(), false);
}
}
@Override
public void onStartTrackingTouch(android.widget.SeekBar sb) {
handler.removeCallbacks(updateTimeTask);
mediaPlayer.pause();
}
@Override
public void onStopTrackingTouch(android.widget.SeekBar sb) {
int totalDuration = mediaPlayer.getDuration();
int currentPosition = sb.getProgress();// * totalDuration/100;
mediaPlayer.seekTo(currentPosition);
mediaPlayer.start();
updateProgressBar();
isSeeking = false;
}
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
if (!isSeeking) {
Log.i(TAG, "completed"); // Called over 9000 times
audioStopped();
}
}
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i2) {
return false; // Error -38 lol
}
@Override
public void onSeekComplete(MediaPlayer mp) {
Log.i(TAG, String.format("seek to: %d", mp.getCurrentPosition()));
isSeeking = false;
}
Lassen Sie uns etwas Code sehen. Ich habe 'seekTo()' bei mehreren Gelegenheiten benutzt. – Geobits
@Geobits Ich hatte etwas Code hinzugefügt. – efpies