我需要知道系统/通知栏什么时候在我的应用程序中打开,而且我找不到任何真正的解决方案,所以我黑了一些似乎运行良好的东西。
发布于 2018-11-27 14:20:33
在我讨论实现之前,我将简要地解释一下我的(非常讨厌的)逻辑。当某个活动由于任何原因不再对用户可见时,onWindowFocusChanged(.)会被调用。但是,onStop()只在用户通过转到后台而不再对活动可见时才被调用。我注意到在切换活动时,onStop()总是在onWindowFocusChanged(.)之后被调用,所以我在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);
}
}
https://stackoverflow.com/questions/53509108
复制相似问题