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