如何检测通知/系统栏何时打开

时间:2018-11-27 22:20:34

标签: android android-notification-bar

我需要知道何时在我的应用程序中打开系统/通知栏,并且找不到任何真正的解决方案,所以我一起破解了一些看起来不错的东西。

1 个答案:

答案 0 :(得分:1)

在深入了解实现之前,我将简要解释我的(非常hacky)逻辑。如果由于某种原因用户不再可见“活动”,则会调用onWindowFocusChanged(..)。但是,仅当活动不再对用户可见时才通过调用后台调用onStop()。我注意到在切换活动时,总是在onWindowFocusChanged(..)之后调用onStop(),因此我在onWindowFocusChanged(..)中添加了一个检查,以查看是否已经调用过onStop()(延迟1秒),并且我使用静态成员来完成此操作。现在了解操作方法...

您将需要一个父活动,您的应用中的所有活动都将扩展。在此父活动中,添加以下静态成员:

private static boolean wasOnStopCalledAfterOnWindowFocusChanged;

然后在onStop()方法中添加此行,并确保在super.onStop()之前调用它。

@Override
protected void onStop() {
    wasOnStopCalledAfterOnWindowFocusChanged = true;
    super.onStop();
}

最后,您需要在此父活动中重写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);
    }
}