2013-02-20 65 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解决了我的问题。没有人知道它是什么意思。