使用setOnKeyListener我可以侦听除Home和End按钮之外的所有物理按钮,是否有可能捕捉Home按钮的动作。
答案 0 :(得分:3)
您可以在Android 4.0+上试试这个:
1.为Intent.ACTION_CLOSE_SYSTEM_DIALOGS注册BroadcastReceiver。
2.调用Intent.getStringExtra(" reason")以获取原因。原因如下:
" Homekey酒店"按下主页键;
"辅助"对于家庭钥匙长按;
答案 1 :(得分:2)
您无需捕捉主页按钮。如果用户按Home并且某些其他活动进入前台,则您的应用会转到后台并在当前活动中调用onPause()
。您可以覆盖该功能以清除搜索字符串或您需要的任何内容。
<强>更新强>
更干净的解决方案是在启动该关键活动时使用标志FLAG_ACTIVITY_NO_HISTORY。因此,当您的活动进入后台系统时,将为您正确关闭它。
答案 2 :(得分:1)
您想使用public boolean dispatchKeyEvent(KeyEvent event)
,如此处所述:http://developer.android.com/reference/android/app/Activity.html#dispatchKeyEvent%28android.view.KeyEvent%29。
像这样使用它:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
// do whatever you want to do here, then return true if you handled the key code
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_BACK:
mBackDown = true;
return true;
case KeyEvent.KEYCODE_HOME:
mHomeDown = true;
return true;
}
}
return super.dispatchKeyEvent(event); // let the default handling take care of it
}
请告诉我这是否适合您。
编辑:不确定为什么这对你不起作用,但是如果不查看其余的代码,就很难说清楚究竟是怎么回事。但是,对于您的任务,我建议您使用finishOnTaskLaunch
清单属性,如http://developer.android.com/guide/topics/manifest/activity-element.html#finish所述:正确使用(将其设置为 true ),这将使确保如果您的Activity重新启动,它将关闭任何现有实例。
答案 3 :(得分:0)
这只有在你修改主要的源代码时才有可能。虽然不建议用于应用目的。但更多的是面向隐藏的菜单。
public static final int KEYCODE_HOME
Since: API Level 1
Key code constant: Home key. This key is handled by the framework and is never delivered to applications.
Constant Value: 3 (0x00000003)