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

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

解决方法

在介绍实现之前,我将简要介绍一下我的(非常hacky)逻辑.当用户因任何原因不再可见Activity时,将调用onWindowFocusChanged(..).但是,仅当用户通过转到后台才能看到“活动”时,才会调用onStop().我注意到在切换活动时,总是在onWindowFocusChanged(..)之后调用onStop(),所以我在onWindowFocusChanged(..)中添加了一个检查以查看是否已经调用了onStop()(延迟时间为1秒),并且我使用静态成员做到了这一点.现在为了方法……

您将需要一个父活动,您的应用程序中的所有活动都会扩展.在此父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);
    }
}

相关文章

文章浏览阅读8.8k次,点赞9次,收藏20次。本文操作环境:win1...
文章浏览阅读1.2w次,点赞15次,收藏69次。实现目的:由main...
文章浏览阅读3.8w次。前言:最近在找Android上的全局代理软件...
文章浏览阅读2.5w次,点赞17次,收藏6次。创建项目后,运行项...
文章浏览阅读8.9w次,点赞4次,收藏43次。前言:在Android上...
文章浏览阅读1.1w次,点赞4次,收藏17次。Android Studio提供...