如果屏幕开启/关闭以及应用程序是否在后台/前景中

时间:2011-06-10 11:16:01

标签: android background screen

我决定在一篇文章中发布两个问题,因为这是完全相同的问题。

我需要知道屏幕何时开启或关闭,以便我可以转动LED。第二个我需要知道我的应用程序是在backgorund还是在前台,以便在应用程序处于后台时管理某些动作的发送通知。

3 个答案:

答案 0 :(得分:11)

为屏幕开/关检查添加答案:

// If you use API20 or more:
DisplayManager dm = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
for (Display display : dm.getDisplays()) {
    if (display.getState() != Display.STATE_OFF) {
        return true;
    }
}
return false;

// If you use less than API20:
PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
if (powerManager.isScreenOn()){ return true; }

请注意,Display.getState()也可以返回STATE_DOZESTATE_DOZE_SUSPEND,这意味着屏幕会以特殊方式启用。有关Display.getState()的更多信息及其返回值:http://developer.android.com/reference/android/view/Display.html#getState()

另请注意,虽然官方文档建议使用isInteractive()而不是isScreenOn(),但如果您真的想知道屏幕的状态,Display.getState()是更好的选择,因为'特殊'设备不是交互式时设置屏幕的条件。

答案 1 :(得分:2)

答案 2 :(得分:2)

你可以通过使用你的活动onWindowFocusChanged()回调来知道你是否在前台;见http://developer.android.com/reference/android/view/Window.Callback.html

您还可以创建广播接收器以捕获SCREEN_ON和SCREEN_OFF事件。 Here就是一个例子。