5

我的一项活动嵌入VideoView播放一些内容。onPause()我分别在和中实现了暂停/恢复视频onResume(),但令我惊讶的是 -onResume在活动对用户真正可见之前被调用。

确切地说,场景如下:

  • 活动在屏幕上,正在播放视频
  • 用户使用电源按钮锁定手机
  • 活动被onPause()调用,视频停止
  • 用户按下电源按钮
  • 在用户解锁屏幕之前调用活动 onResume()(并因此恢复视频)

我在 Android 2.2、2.3 和 4.0 中确认了这种行为。我想这是故意这样做的,让活动准备在锁定屏幕消失后立即重绘自己。

如何检测活动实际出现在用户面前的时刻?我试图等待onWindowFocusChanged(true)被叫,它似乎工作,但它并没有让我感到完全安全。

4

2 回答 2

8

您需要等待 onWindowFocusChanged 事件以及 OnResume 事件。这是一个众所周知的问题,在 Android 4.1+ 中不再出现。详情请访问http://android-developers.blogspot.co.uk/2011/11/making-android-games-that-play-nice.html

于 2012-08-22T13:46:47.170 回答
0

一般来说onResume应该足够了,但对于你的特殊情况,我相信你应该恢复视频onResume(),而不是当用户解锁他的屏幕时。

要实现这一点,您需要制作一个BroadcastReceiver监听名为的意图:Intent.ACTION_USER_PRESENT,并onReceive恢复您的视频。

Intent.ACTION_USER_PRESENT:
在设备唤醒后用户在场时发送(例如,当键盘保护消失时)。
这是一个只能由系统发送的受保护意图。

于 2012-08-22T10:37:28.883 回答