如何判断设备是否正在睡眠

时间:2010-11-23 20:52:06

标签: android

这是我的情景。我有一个正在播放背景声音的应用。使用BroadcastReceiver我可以告诉显示器何时关闭,然后杀死声音。我还可以判断屏幕是否重新打开。但是,如果设备处于锁定状态,我不希望音频启动。因此,我等待ACTION_USER_PRESENT意图发出信号。这一切都有效,但如果用户在关闭屏幕后快速重新打开屏幕,则无法获得锁定屏幕或ACTION_USER_PRESENT消息。那么,有没有办法告诉我,当屏幕重新打开时,设备是否被锁定,我想这也意味着是否正在睡觉?

4 个答案:

答案 0 :(得分:12)

((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn()

答案 1 :(得分:9)

您可以尝试KeyguardManager检查设备是否已锁定。这是一些代码(我自己没试过):

KeyguardManager kgMgr = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean showing = kgMgr.inKeyguardRestrictedInputMode();
祝你好运!

答案 2 :(得分:0)

((PowerManager) getSystemService(Context.POWER_SERVICE)).isScreenOn()

告诉屏幕是否已打开。因此,如果屏幕打开但设备已锁定,则会生效。 取而代之的是,

inKeyguardRestrictedInputMode()
如果设备被锁定,

就会生效。

答案 3 :(得分:0)

Satur9nine的解决方案当时是正确的,但此后isKeyguardRestricatedInputMode()被弃用。现在,不建议使用某些与powerManager相关的功能。

有一个更新,更准确的解决方案:isKeyguardLocked()用于确定设备是否被锁定,还有一种用于获取screen is interactive是否被锁定的方法。您正在寻找两者的组合。

KeyguardManager appKeyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
PowerManager appPowerManager = (PowerManager) getSystemService(Context,POWER_SERVICE);
boolean showing = !appKeyguard.isKeyguardLocked() && appPowerManager.isInteractive();