我的一项活动是嵌入VideoView
来播放一些内容。我分别在onPause()
和onResume()
中实现了暂停/恢复视频,但令我惊讶的是,在用户真正看到该活动之前调用了onResume
。
确切地说,情况如下:
onPause()
,视频停止onResume()
(从而恢复视频) 我在Android 2.2,2.3和4.0中证实了这一行为。我想它是故意这样做的,让活动准备在锁定屏幕消失后立即重绘。
如何检测活动实际出现在用户身上的那一刻?我试图等待onWindowFocusChanged(true)
被叫,它似乎有效,但它并没有让我觉得非常安全。
答案 0 :(得分:8)
您需要等待onWindowFocusChanged事件以及OnResume事件。这是Android 4.1+中不再出现的众所周知的问题。详情请见http://android-developers.blogspot.co.uk/2011/11/making-android-games-that-play-nice.html
答案 1 :(得分:0)
一般情况onResume
应该足够了,但对于您的特殊情况,我认为您应该恢复不在onResume()
上的视频,而是在用户解锁屏幕时。
要实现这一目标,您需要制作一个BroadcastReceiver
来监听名为Intent.ACTION_USER_PRESENT
的意图,并在onReceive
中恢复您的视频。
Intent.ACTION_USER_PRESENT:
设备唤醒后用户在场时发送 (例如当键盘消失时) 这是一个可以保护的意图 只能由系统发送。