android - 如何判断 Activity 已经被通知区域覆盖?

标签 android android-notification-bar android-statusbar

通常,Android 会在您的 Activity 开始被遮挡或隐藏时调用 onPause,然后在它不再显示时调用 onStop .在我的游戏中,我在 onPause 中暂停了游戏,因此用户不会在看别处时输掉游戏。

但是,当用户向下拖动通知栏时,它覆盖了我的Activity,但是onPauseonStop都没有被调用。文档中似乎没有提到这一点。游戏在后台滴答作响,没有人在看。发生这种情况时,是否有其他方式告诉我的 Activity 已被遮挡,以便我可以在用户输之前暂停游戏?我在 Android 开发者网站上找不到任何相关信息。

最佳答案

ActivityonWindowFocusChanged(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/

相关文章:

android - 在没有窗口的情况下更改状态栏颜色

android - 用 Room 实现搜索

android - 在没有来自 Android 的对话的情况下发送 facebook 用户到用户的私有(private)消息

java - 如何在Java中处理JSON(Android Studio)

android - 如何在我的应用程序中的特定 Activity 中锁定状态栏和通知栏

android - 如何在 Android 中为状态栏和通知栏显示不同的图标?

android - Galaxy S4 上带有动态壁纸的透明通知栏

android - 透明状态栏android

android - setOnClickListener 来源 - RuntimeException ("Stub!")