我想知道电影是否距离结尾仅一分钟。 所以,我使用下面的代码来检测。但是,播放器挂起并且无法执行任何操作。 有人可以更正我的代码吗?谢谢!
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);
答案 0 :(得分:1)
它会挂起,因为你有一个无限的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);
}
}
}
然后将您的处理程序声明为类成员变量,以便它可以在您的runnable中访问,并启动它:
mCheckEndHandler = new Handler();
mCheckEndHandler.post(mPlayToEnd);
您的可运行将检查条件,如果它满意,它将发送广播,否则,它将在1秒(1000毫秒)内再次运行。整个过程一直重复,直到你的情况成立。