【发布时间】:2012-02-11 12:12:38
【问题描述】:
这已经让我发疯了一段时间了。
有没有什么方法可以可靠地检测到在 Android 应用程序中是否按下了主页按钮?
如果做不到这一点,是否有一种可靠的方法来判断导致活动进入 onPause 的原因?即我们是否可以检测它是由新活动启动还是按返回/主页引起的。
我看到的一个建议是覆盖 onPause() 并调用 isFinishing() 但这会在按下主页按钮时返回 false,就像新活动开始时一样,因此无法区分两者。
非常感谢任何帮助。
** 更新**: 感谢@android-hungry 提供此链接:https://nishandroid.blogspot.com/
重写以下方法:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
然后按下主页按钮会触发以下事件:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
我不确定这条线是否有任何副作用:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
因此,与流行的看法相反,您实际上可以听出 home 键。令人担忧的是,您可以返回 false 并且让 home 键什么都不做。
更新: 正如预期的那样,这有一些副作用 - 启用此模式后,嵌入的视频和谷歌地图似乎不可见。
更新: 据说这个 hack 从 Android 4.0 起不再有效
【问题讨论】:
-
我的问题不是在 back 和 home 键之间伪装,但我想在这两种情况下都完成应用程序。我使用
Activity.onUserLeaveHint(). -
唯一的问题是 onUserLeaveHint() 当我从上述活动开始活动时也会触发,我只想知道是否按下了返回或主页。感谢您的建议
-
确实如此,但不幸的是,据我所知,它是唯一可以接收有关 Home 键使用信息的地方。使收获误报变得更加困难,可以轻松识别出许多误报,但仍然使听起来很简单的任务变得相当复杂。
-
@DeanWild:你读过这个吗:nisha113a5.blogspot.com
-
TYPE_KEYGUARD 常量已从 Android 5.0 中的 WindowManager.LayoutParams 中删除
标签: android android-homebutton