如何检测 notification/system 栏何时打开

How to detect when the notification/system bar is opened

我需要知道 system/notification 栏何时在我的应用程序中打开,但我找不到任何真正的解决方案,所以我一起破解了一些似乎工作得很好的东西。

在我着手实施之前,我将简要解释一下我的(非常老套的)逻辑。当 Activity 由于任何原因不再对用户可见时,将调用 onWindowFocusChanged(..) 。但是,仅当 Activity 通过转到后台对用户不再可见时才会调用 onStop() 。我注意到当切换活动时,onStop() 总是在 onWindowFocusChanged(..) 之后被调用,所以我在 onWindowFocusChanged(..) 中添加了一个检查以查看 onStop() 是否已经被调用(延迟 1 秒),并且我使用静态成员做到了这一点。现在是操作方法...

您将需要一个父级 Activity,您应用中的所有 Activity 都会扩展。在此父 Activity 中,添加此静态成员:

private static boolean wasOnStopCalledAfterOnWindowFocusChanged;

然后在你的 onStop() 方法中,添加这一行,确保你在 super.onStop()

之前调用它
@Override
protected void onStop() {
    wasOnStopCalledAfterOnWindowFocusChanged = true;
    super.onStop();
}

最后,你需要重写这个父Activity中的onWindowFocusChanged(..),并添加下面的逻辑。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    if (!hasFocus) {
        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                if (!wasOnStopCalledAfterOnWindowFocusChanged) {

                    // NOTIFICATION BAR IS DOWN...DO STUFF

                }
                wasOnStopCalledAfterOnWindowFocusChanged = false;
            }
        }, 1000);
    }
}