我需要知道何时在我的应用程序中打开系统/通知栏,并且找不到任何真正的解决方案,所以我一起破解了一些看起来不错的东西。
答案 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);
}
}