如何告知活动已被通知区域覆盖?

Dan*_*lme 8 android android-notification-bar

通常情况下,Android会onPause在您Activity开始被遮挡或隐藏时调用它,然后onStop在它不再显示时调用.在我的游戏中,我暂停了游戏onPause,因此用户在寻找其他地方时不会丢失游戏.

但是,当用户拖动通知栏时,它会覆盖我的Activity,但既onPause不会也不会onStop被调用.文档中似乎没有提到这一点.游戏在背景中剔除,没有人看着它.还有其他一些方法可以告诉我 Activity在发生这种情况时会被遮挡,所以我可以在用户输掉之前暂停游戏吗?我在Android开发者网站上找不到任何相关内容.

Ste*_*mer 15

onWindowFocusChanged(boolean hasFocus)Activity应该服务所需的目的.false拖动通知区域时会调用它,并且true一旦区域被拖回,就会调用它.相应的Android文档声明此方法"是用户是否可以看到此活动的最佳指标".它还明确指出在显示"状态栏通知面板"时会触发回调.

重要的是要注意,在其他情况下也会调用此方法.一个很好的例子是显示一个AlertDialog.onWindowFocusChanged甚至在活动本身显示时调用AlertDialog.这可能需要考虑,具体取决于您的游戏是否使用AlertDialogs或其他导致焦点更改的内容.

在类似于此问题中描述的方案中,我们已onWindowFocusChanged成功使用该方法,例如在带有Android 4.4的Nexus 5或带有Android 4.1的Sony Xperia Tablet上.


pgs*_*rom 5

由于StatusBarManager不是官方 API 的一部分,我发现不太可能有办法检测它。即使使用反射,状态栏类似乎也没有吸引听众的钩子。

如果可行,您可以停用状态栏。否则,我认为你运气不好:(

  • 这绝对不应该是公认的答案。很明显,这只是回答者的猜测,而且显然是错误的。 (2认同)