在Android MediaPlayer中暂停和搜索

时间:2013-02-20 20:26:02

标签: android android-mediaplayer

我有SeekBarMediaPlayer。我想在它暂停时寻求,但似乎文档对我而言:

  

请注意,seekTo(int)也可以在其他州调用,   例如Prepared,Paused和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;
}

1 个答案:

答案 0 :(得分:7)

添加onErrorListener后,我发现此处发生what=-38错误。但是,从true返回onError解决了我的问题。没人知道它是什么意思。