我有一个长时间运行的服务,听取传感器输入。为了节省电池电量,我已停止在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并继续并立即重新开始采样?
答案 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
。看起来它应该可行,但我没有尝试过。