我需要知道系统/通知栏何时在我的应用程序中打开,但我找不到任何真正的解决方案,所以我将一些东西组合在一起,看起来效果很好。
在详细介绍实现之前,我将简要解释一下我的(非常老套的)逻辑。当某个 Activity 由于任何原因不再对用户可见时,将调用 onWindowFocusChanged(..)。但是,仅当 Activity 通过转到后台不再对用户可见时才会调用 onStop()。我注意到,当切换 Activity 时,onStop() 总是在 onWindowFocusChanged(..) 之后调用,因此我在 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);
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)