MediaPlayer跳转到最后的seekTo()位置

时间:2015-05-05 08:06:03

标签: android android-mediaplayer android-seekbar

当我在媒体播放器上调用seekTo()方法时,文件从正确的位置播放并且效果很好但是一旦播放完成我希望它返回到“0”,而不是返回到的位置我调用了seekTo()方法。

我正在使用一个每隔500毫秒对当前位置进行采样的线程,然后用进度更新我的SeekBar。由于mediaPlayer回到了我“寻找”的最后一个地方 - 塞克巴尔跳回那里看起来很糟糕。

我希望它在文件播放完毕后返回到0位置,当然我可以使用OnCompletionListener手动设置它,但这会创建一个跳转到我使用seekTo()方法设置的位置,然后返回到0。

以下是我正在进行的进度抽样的代码:

private void updateProgress() {
    mListenerThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (isRunning) {
                int position = mMediaPlayer.getCurrentPosition();
                mProgressListener.onProgress(position);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    mMediaPlayer.seekTo(0);
                    e.printStackTrace();
                }
            }
        }
    });
    mListenerThread.start();
}

2 个答案:

答案 0 :(得分:0)

您可以保存已设置的位置并检查当前位置是否为设置位置,如果是,则将进度设置为零,这将停止在OnCompletionListener上发生跳转

定义变量

int lastSeek = -1;

并在寻求时将其设置为已被寻求的位置

void seekTo(int position) {
 //do the seeking here
 lastSeek = position;
}

然后在updateProgress上你会看到position是lastSeek,如果是,那么这个位置是0又名

private void updateProgress() {
    mListenerThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (isRunning) {
                int position = mMediaPlayer.getCurrentPosition();
                mProgressListener.onProgress(position == lastSeek ? 0 : position);
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    mMediaPlayer.seekTo(0);
                    e.printStackTrace();
                }
            }
        }
    });
    mListenerThread.start();
}

并在onCompletionListener中将lastSeek设置为-1

MediaPlayer.OnCompletionListener completionListener
                      = new MediaPlayer.OnCompletionListener(){    
    @Override
    public void onCompletion(MediaPlayer arg0) {
     lastSeek = -1;
     //set actual position to zero and update the bar
   }
};

答案 1 :(得分:0)

请实施onCompletion Listener。

NSSplitView

当歌曲结束时,媒体播放器会自动调用onCompletion方法。

mediaPlayer.setOnCompletionListener(this);