如何检测 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);
}
}
我需要知道 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);
}
}