如何在onStop()中检查屏幕开/关状态?

时间:2013-10-13 21:03:18

标签: android android-activity android-broadcast

如上所述here,当屏幕熄灭时,将调用当前活动的onStop()。我需要在调用onStop()的{​​{1}}时检查屏幕开/关状态。所以我为这些操作(ActivityBroadcastReceiver)注册了ACTION_SCREEN_ON来记录当前的开/关状态(并且它们正常工作,我已经记录了!)。
但当我关闭屏幕并检查ACTION_SCREEN_OFF中的开/关状态时,表示屏幕已开启。为什么?我认为接收者必须在调用onStop之前收到ACTION_SCREEN_OFF,这样会出错?

3 个答案:

答案 0 :(得分:52)

您可以尝试使用PowerManager系统服务,此处为示例和official documentation(请注意此方法已在API级别7中添加):

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean isScreenOn = pm.isScreenOn();

编辑:

isScreenOn()方法已弃用API级别21.您应该使用isInteractive:

boolean isScreenOn = pm.isInteractive();

http://developer.android.com/reference/android/os/PowerManager.html#isInteractive()

答案 1 :(得分:2)

this answer中提到的类似问题。 在API 21及更高版本中,我们可以使用DisplayManager来确定显示状态。这具有支持查询多个显示的优点:

DisplayManager dm = (DisplayManager) 
context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
    if (display.getState() != Display.STATE_OFF) {
        return true;
    }
}
return false;

根据您的情况,查询显示特定视图的显示可能更合适:

myView.getDisplay().getState() != Display.STATE_OFF

答案 2 :(得分:0)

Uncaught IntegrationError: stripe.redirectToCheckout: Invalid value for sessionId. You specified 'pi_1FrFbeBNGSiXwN3W9sCWFtQr'.
    at new t (https://js.stripe.com/v3/:1:10765)
    at Eu (https://js.stripe.com/v3/:1:136437)
    at wu (https://js.stripe.com/v3/:1:137398)
    at Ou (https://js.stripe.com/v3/:1:138478)
    at Pu (https://js.stripe.com/v3/:1:138592)
    at e.redirectToCheckout (https://js.stripe.com/v3/:1:139007)
    at file:///Users/MattMachine/sdpp_stripe/client.html:62:16
t @ (index):1
Eu @ (index):1
wu @ (index):1
Ou @ (index):1
Pu @ (index):1
(anonymous) @ (index):1
(anonymous) @ client.html:62