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();
}
您可以保存已设置的位置,并检查当前位置是否是设置的位置,如果是,则将进度设置为零,这将阻止在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播放器暂停和不播放?