Прежде чем приступить к реализации, я кратко объясню мою (очень хакерскую) логику.Когда действие по какой-либо причине перестает быть видимым для пользователя, вызывается onWindowFocusChanged (..).Однако onStop () вызывается только тогда, когда действие больше не отображается для пользователя при переходе в фоновый режим.Я заметил, что при переключении Activity onStop () всегда вызывается после onWindowFocusChanged (..), поэтому я добавил проверку onWindowFocusChanged (..), чтобы увидеть, был ли уже вызван onStop () (с задержкой в 1 секунду), иЯ сделал это с помощью статического члена.Теперь для получения инструкций ...
Вам понадобится родительское действие, которое расширяет все действия в вашем приложении.В этом родительском действии добавьте этот статический член:
private static boolean wasOnStopCalledAfterOnWindowFocusChanged;
Затем в методе onStop () добавьте эту строку, убедитесь, что вы вызываете ее ПЕРЕД super.onStop ()
@Override
protected void onStop() {
wasOnStopCalledAfterOnWindowFocusChanged = true;
super.onStop();
}
Наконец, вам нужно переопределить onWindowFocusChanged (..) в этом родительском Activity и добавить следующую логику.
@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);
}
}