Android 获取屏幕是否打开/关闭以及应用程序是否位于后台/前台

Android 获取屏幕是否打开/关闭以及应用程序是否位于后台/前台,android,background,screen,Android,Background,Screen,我决定在一篇文章中发表两个问题,因为这是一个完全相同的问题 我需要知道屏幕何时打开或关闭,以便打开LED。第二个问题是,我需要知道我的应用程序是在后台还是在前台,以便在应用程序处于后台时管理发送有关某个操作的通知。前面也有类似的问题。以下是其中几个的链接: 早些时候,关于Stackoverflow也有类似的问题。以下是其中几个的链接: 通过使用活动的onWindowFocusChanged()回调,您可以知道自己是否在前台;看 您还可以创建广播接收器来捕获屏幕打开和屏幕关闭事件。例如

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


我需要知道屏幕何时打开或关闭,以便打开LED。第二个问题是,我需要知道我的应用程序是在后台还是在前台,以便在应用程序处于后台时管理发送有关某个操作的通知。

前面也有类似的问题。以下是其中几个的链接:


  • 早些时候,关于Stackoverflow也有类似的问题。以下是其中几个的链接:


  • 通过使用活动的onWindowFocusChanged()回调,您可以知道自己是否在前台;看


    您还可以创建广播接收器来捕获屏幕打开和屏幕关闭事件。例如。

    通过使用活动的onWindowFocusChanged()回调,您可以知道自己是否在前台;看


    您还可以创建广播接收器来捕获屏幕打开和屏幕关闭事件。是一个示例。

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

    // 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\u DOZE
    STATE\u DOZE\u SUSPEND
    ,这意味着屏幕以特殊方式打开。有关
    Display.getState()
    及其返回值的更多信息,请参见此处:


    另外请注意,尽管官方文档建议使用
    isInteractive()
    而不是
    isScreenOn()
    ,但如果您确实想知道屏幕的状态,请使用
    Display.getState()
    是一个更好的选择,因为“特殊”条件会在设备不交互时设置屏幕打开。

    添加屏幕打开/关闭检查的答案:

    // 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\u DOZE
    STATE\u DOZE\u SUSPEND
    ,这意味着屏幕以特殊方式打开。有关
    Display.getState()
    及其返回值的更多信息,请参见此处:


    另外请注意,尽管官方文档建议使用
    isInteractive()
    而不是
    isScreenOn()
    ,但如果您确实想知道屏幕的状态,请使用
    Display.getState()
    是一个更好的选择,因为“特殊”条件会在设备不交互时打开屏幕。

    官方文档说
    请特别注意,设备在做梦时仍然被认为是交互的。
    。我发现更准确,更准确updated@Jaydeep嗯,很有趣。将更新答案。非常感谢。如何在后台使用getState()方法假设显示器关闭时需要在后台进行一些工作。(操作\屏幕\关闭处理是否与用户交互,但不与显示器打开/关闭)。有什么想法吗?感谢官方文档中提到的
    ,请特别注意,该设备在做梦时仍然被认为是交互式的。我发现更准确,更准确updated@Jaydeep嗯,很有趣。将更新答案。非常感谢。如何在后台使用getState()方法假设显示器关闭时需要在后台进行一些工作。(操作\屏幕\关闭处理是否与用户交互,但不与显示器打开/关闭)。有什么想法吗?谢谢