Android VideoView 检测视频即将完成
Android VideoView detect video is soon finish
我想知道电影是不是离结尾只有一分钟了。
所以,我使用下面的代码来检测。但是,播放器已挂起,无法执行任何操作。
有人可以更正我的代码吗?谢谢!
public Runnable mPlayToEnd = new Runnable() {
public void run() {
while(true)
{
if(mVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60)
{
Intent intent = new Intent(WILL_END);
sendBroadcast(intent);
mSendEndEvent = false;
Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
Log.d("123","--Soon End--");
}
}
}
};
Handler mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);
它挂起是因为你有一个永远不会中断的无限 while(true) 循环,它会尝试 运行 全速检查你是否距离结束还有 1 分钟。你可以做的是定期检查,例如。每 1 秒,然后进行相应处理,因此您的代码可能看起来像:
public Runnable mPlayToEnd = new Runnable() {
@Override
public void run() {
if (mmVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60) {
Intent intent = new Intent(WILL_END);
sendBroadcast(intent);
mSendEndEvent = false;
Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
Log.d("123","--Soon End--");
}
else {
mCheckEndHandler.postDelayed(mPlayToEnd, 1000);
}
}
}
然后将您的处理程序声明为 class 成员变量,以便它可以在您的 运行nable 中访问,然后启动它:
mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);
你的 运行nable 会检查条件,如果满足,它会发送广播,否则,它会在 1 秒(1000 毫秒)后再次 运行 自己。整个过程不断重复,直到您的条件为真。
我想知道电影是不是离结尾只有一分钟了。 所以,我使用下面的代码来检测。但是,播放器已挂起,无法执行任何操作。 有人可以更正我的代码吗?谢谢!
public Runnable mPlayToEnd = new Runnable() {
public void run() {
while(true)
{
if(mVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60)
{
Intent intent = new Intent(WILL_END);
sendBroadcast(intent);
mSendEndEvent = false;
Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
Log.d("123","--Soon End--");
}
}
}
};
Handler mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);
它挂起是因为你有一个永远不会中断的无限 while(true) 循环,它会尝试 运行 全速检查你是否距离结束还有 1 分钟。你可以做的是定期检查,例如。每 1 秒,然后进行相应处理,因此您的代码可能看起来像:
public Runnable mPlayToEnd = new Runnable() {
@Override
public void run() {
if (mmVideoDisplayView.getDuration() - mVideoDisplayView.getCurrentPosition() <= 1000 * 60) {
Intent intent = new Intent(WILL_END);
sendBroadcast(intent);
mSendEndEvent = false;
Log.d("123","--Duration = " + mVideoDisplayView.getDuration() + "--");
Log.d("123","--Current = " + mVideoDisplayView.getCurrentPosition() + "--");
Log.d("123","--Soon End--");
}
else {
mCheckEndHandler.postDelayed(mPlayToEnd, 1000);
}
}
}
然后将您的处理程序声明为 class 成员变量,以便它可以在您的 运行nable 中访问,然后启动它:
mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);
你的 运行nable 会检查条件,如果满足,它会发送广播,否则,它会在 1 秒(1000 毫秒)后再次 运行 自己。整个过程不断重复,直到您的条件为真。