2013-02-20 58 views
5

我有一個SeekBar和一個MediaPlayer。我想尋求,而它的暫停,但似乎文檔謊言對我說:在Android MediaPlayer中暫停和查找

請注意,seekTo(INT)也可以在其他國家被請來 這樣的準備,暫停和PlaybackCompleted狀態。

像往常一樣,在Android我必須寫解決方法,而不是代碼(和其中狀態是MediaPlayer此時我不能知道,所以該表和狀態機是完全無用的)。因爲而不是onSeekCompleteonCompletion(超過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; 
} 
+1

讓我們看看一些代碼。我多次使用'seekTo()'。 – Geobits 2013-02-20 20:35:31

+0

@Geobits我加了一些代碼。 – efpies 2013-02-20 20:54:27

回答

7

加入onErrorListener後,我發現,與what=-38錯誤發生在這裏。但是,從onError返回true解決了我的問題。沒有人知道它是什麼意思。