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

新手上路,请多包涵

如此 所述,当屏幕关闭时,将调用当前活动的 onStop() 。当调用我的 ActivityonStop() 时,我需要检查屏幕开/关状态。所以我已经为这些操作注册了 BroadcastReceiverACTION_SCREEN_ONACTION_SCREEN_OFF )以记录当前的开/关状态(并且它们正常工作! ).

但是当我关闭屏幕并检查 onStop 中的开/关状态时,它表示屏幕已打开。为什么?我认为接收者必须在调用 ACTION_SCREEN_OFF 之前收到 onStop 是怎么回事?

原文由 Soheil 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

您可以为此尝试使用 PowerManager 系统服务,这里是示例和 官方文档(注意此方法是在 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()

原文由 Alexander Semenov 发布,翻译遵循 CC BY-SA 3.0 许可协议

正如 这个对类似问题的回答 中提到的。在 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

原文由 Rem-D 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题