通常,Android 会在您的 Activity
开始被遮挡或隐藏时调用 onPause
,然后在它不再显示时调用 onStop
.在我的游戏中,我在 onPause
中暂停了游戏,因此用户不会在看别处时输掉游戏。
但是,当用户向下拖动通知栏时,它覆盖了我的Activity
,但是onPause
和onStop
都没有被调用。文档中似乎没有提到这一点。游戏在后台滴答作响,没有人在看。发生这种情况时,是否有其他方式告诉我的 Activity
已被遮挡,以便我可以在用户输之前暂停游戏?我在 Android 开发者网站上找不到任何相关信息。
最佳答案
Activity
的 onWindowFocusChanged(boolean hasFocus)
应该满足所需的目的。当通知区域被向下拖动时调用 false
,当通知区域被向上拖动时调用 true
。对应的Android documentation声明此方法“是此 Activity 是否对用户可见的最佳指示器”。它还明确指出当显示“状态栏通知面板”时会触发回调。
需要注意的是,这个方法在其他情况下也会被调用。一个很好的例子是 AlertDialog
的显示。 onWindowFocusChanged
甚至在 Activity 本身显示 AlertDialog
时调用。这可能需要考虑,具体取决于您的游戏是否使用 AlertDialogs 或其他导致焦点改变的东西。
在与这个问题中描述的场景类似的场景中,我们成功地使用了 onWindowFocusChanged
方法,例如在装有 Android 4.4 的 Nexus 5 或装有 Android 4.1 的 Sony Xperia 平板电脑上。
关于android - 如何判断 Activity 已经被通知区域覆盖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12689497/