5
我有一個SeekBar
和一個MediaPlayer
。我想尋求,而它的暫停,但似乎文檔謊言對我說:在Android MediaPlayer中暫停和查找
請注意,seekTo(INT)也可以在其他國家被請來 這樣的準備,暫停和PlaybackCompleted狀態。
像往常一樣,在Android我必須寫解決方法,而不是代碼(和其中狀態是MediaPlayer
此時我不能知道,所以該表和狀態機是完全無用的)。因爲而不是onSeekComplete
onCompletion
(超過9000次,我不是在開玩笑)方法被調用! onSeekComplete
僅在撥打seekTo
來自onPrepared
(爲什麼,上帝,爲什麼?)之後才被調用。我甚至不知道該怎麼做。我花了大約5個小時,沒有固定。我能做什麼?
UPD
這是我的代碼。
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;
}
讓我們看看一些代碼。我多次使用'seekTo()'。 – Geobits 2013-02-20 20:35:31
@Geobits我加了一些代碼。 – efpies 2013-02-20 20:54:27