用ACTION_USER_PRESENT替换ACTION_SCREEN_ON?

时间:2011-09-18 21:24:39

标签: android android-sensors

我有一个长时间运行的服务,听取传感器输入。为了节省电池电量,我已停止在ACTION_SCREEN_OFF上对传感器进行采样,并在ACTION_SCREEN_ON上再次启动它。

然而,通常,我只需打开手机即可快速浏览锁定屏幕上的时钟(检查当前时间),然后在不解锁手机的情况下再次将其关闭。在这种情况下,没有理由将传感器旋转起来然后立即再次关闭。

因此我尝试在广播侦听器中用ACTION_USER_PRESENT替换ACTION_SCREEN_ON。除了一种特殊情况外,这种方法工作正常:当屏幕熄灭并且我立即按下电源按钮(或主页按钮)时,将跳过锁定屏幕。然后永远不会收到ACTION_USER_PRESENT,只会收到ACTION_SCREEN_ON。

接收ACTION_SCREEN_ON以了解屏幕锁定是否处于活动状态并期待以后的ACTION_USER_PRESENT时,有没有办法让我接收广播接收器?或者如果跳过锁定屏幕,不要等待ACTION_USER_PRESENT并继续并立即重新开始采样?

2 个答案:

答案 0 :(得分:3)

直到Android 4.4,如果屏幕已开启且锁定屏幕已禁用,则仅触发ACTION_SCREEN_ON。 Frm Android 5.0,在这种情况下,会触发ACTION_SCREEN_ON和ACTION_USER_PRESENT。

答案 1 :(得分:0)

  

我有一个长时间运行的服务,正在监听传感器输入。

请注意,用户不喜欢“长时间运行的服务”,除非您使用startForeground(),否则Android可能会关闭您的服务。

  

我已停止在ACTION_SCREEN_OFF上对传感器进行采样,并在ACTION_SCREEN_ON上重新启动传感器。

除非您使用的是WakeLock,否则在您的传感器监听器注册时,设备仍应处于睡眠状态。我不确定你是通过ACTION_SCREEN_OFF / ACTION_SCREEN_ON来获取任何东西的。

  

我收到一个ACTION_SCREEN_ON,知道屏幕锁定是否有效以及期待ACTION_USER_PRESENT,有没有办法接收广播接收器?

您可以在inKeyguardRestrictedInputMode()上尝试KeyguardManager。看起来它应该可行,但我没有尝试过。