首页 文章

Android MediaPlayer SeekTo功能解决方法

提问于
浏览
6

我正在创建一个非常简单的媒体播放器应用 . 我想从使用getCurrentPosition捕获的SeekTo位置恢复这首歌 . 但是,seekTo并不是从我捕获的位置开始,而是从头开始 .

代码捕获当前位置,暂停和更改按钮文本以单击以继续

int media_length = mediaplayer.getCurrentPosition();
    Toast.makeText(this,"media length is"+media_length, Toast.LENGTH_LONG).show();
    mbutton.setText("Click to Resume");
    mediaplayer.pause();

要搜索的代码捕获位置,启动和更改按钮文本以单击以暂停

mediaplayer.seekTo(media_length);
    mediaplayer.start();
    mbutton.setText("Click to Pause");

有几个帖子已经与它有关,但它们似乎在Android中声称存在错误 . 参考:MediaPlayer seekTo doesn't work并且有任何解决方法吗?感谢任何帮助 .

2 回答

  • 8

    你可以尝试下面的代码 . 它对我有用......

    public void forwardSong() {
        if (mPlayer != null) {
            int currentPosition = mPlayer.getCurrentPosition();
            if (currentPosition + seekForwardTime <= mPlayer.getDuration()) {
                mPlayer.seekTo(currentPosition + seekForwardTime);
            } else {
                mPlayer.seekTo(mPlayer.getDuration());
            }
        }
    }
    

    您可以在此之前暂停mediaplayer,并在此方法之后调用start方法 .

  • 1

    尝试使用回调MediaPlayer.OnSeekCompleteListener .

    重要提示:在此示例中,我添加了 SystemClock.sleep(200) ,因为在搜索到真正完成之前玩家很快就会调用 onSeekComplete(MediaPlayer arg0) .

    mMediaPlayer.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
            @Override
            public void onSeekComplete(MediaPlayer arg0) {
                Log.d(TAG, "onSeekComplete() current pos : " + arg0.getCurrentPosition());
                SystemClock.sleep(200);
                mMediaPlayer.start();
            }
        });
        try {
            mMediaPlayer.seekTo(mCurrentPos);
        } catch (IllegalStateException e){
            Log.d(TAG, e.getLocalizedMessage(), e);
        }
    

相关问题