当前位置: 首页 > 知识库问答 >
问题:

MediaPlayer跳到最后一个seekTo()位置

秦权
2023-03-14
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();
}

共有1个答案

宦正诚
2023-03-14

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

定义变量

int lastSeek = -1;

当搜索时,将其设置到已经搜索到的位置

void seekTo(int position) {
 //do the seeking here
 lastSeek = position;
}
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();
}
MediaPlayer.OnCompletionListener completionListener
                      = new MediaPlayer.OnCompletionListener(){    
    @Override
    public void onCompletion(MediaPlayer arg0) {
     lastSeek = -1;
     //set actual position to zero and update the bar
   }
};
 类似资料:
  • MediaPlayer中的seekTo()方法有问题。看来根本不管用!我跟踪了关于这个问题的其他线索,并尝试了不同的解决方案,但seekTo()仍然什么也没做!下面是我的代码: system.out.println()显示以下输出: null

  • 如果我在开始之前调用seekTo,音频将从开始开始。 是否可以从特定点开始播放音频? 谢了!

  • 问题内容: 码: 输出: 剩余10秒剩余 8秒剩余 6秒剩余 4秒剩余 完成! 问题: 如何显示“ 剩余2秒 ”?经过的时间确实是10秒,但是最后一个onTick()永远不会发生。如果我将第二个参数从2000更改为1000,则输出为: 剩余10秒剩余 9秒剩余 8秒剩余 7秒剩余 6秒剩余 5秒剩余 4秒剩余 3秒剩余 2秒剩余 完成! 如此看来,似乎跳过了最后一个onTick()调用。顺便说一句

  • 当播放时,方法可以很好地工作。如果被暂停,当我找到一个位置并调用时,它就会在它暂停的地方开始播放。 我的代码如下所示,在logcat中,我可以看到它正在寻找。

  • 当新项目添加到视图中时,我试图使我的listview移动到最后一个项目。有了textview,我可以通过这样做来实现这一点 但对于带有适配器的listview,我似乎无法找到调用的方法。我的适配器设置

  • 我使用在我的Android应用程序播放视频。当播放暂停通过方法和我调用的surfaceView我显示的视频中不更新。它显示当我调用方法时视频停止的帧。 当I再次启动时,它仅从前面的中指定的帧开始。 我怎么能强制更新当media播放器暂停和不播放?