主页按钮侦听器

问题描述:

使用setOnKeyListener我能够侦听除Home和End按钮之外的所有物理按钮,是否有可能捕捉到Home按钮的动作。主页按钮侦听器

+4

我很确定你不能覆盖Home。你为什么想要? – 2011-05-06 05:29:13

+0

在我的应用程序中,我正在阅读一些不应该被任何第三人访问的重要文件,如果我正确地退出该应用程序是不可能的,但是当用户从该活动中按Home时,可以打开该活动搜索。 – Vignesh 2011-05-06 06:42:21

+1

捕捉主页按钮的方法无效。您应该遵循活动生命周期并查看用户按Home按钮时发生的情况。 – Zelimir 2011-05-06 07:12:22

您不需要捕捉主页按钮。如果用户按Home并且其他一些活动出现在前台,则您的应用程序将转到后台并在您当前的活动中调用onPause()。你可以重写该函数来清理搜索字符串或任何你需要的东西。

UPDATE:

更干净的解决方案是在开始这一关键活动时使用标志FLAG_ACTIVITY_NO_HISTORY。所以,当你的活动去后台系统将适当地关闭它。

+0

Hi Zelimir,我在onStop()函数里面调用了finish()函数,所以它的工作原理却显示Sorry对象应用程序意外停止。 – Vignesh 2011-05-06 07:27:33

+0

第一行应该是super.onPause();然后你可以调用finish()。如果这没有帮助,请发布包含有用信息的错误报告的首行为什么发生。 – Zelimir 2011-05-06 07:50:03

+0

嗨Zelimir,完成()内onPause()完成方向更改期间的活动,所以我给它在onStop(),我很抱歉应用程序意外关闭。 – Vignesh 2011-05-09 04:19:19

您想要使用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),这将确保如果您的活动重新启动,它将关闭任何现有实例。

+0

嗨Femi,它仍然不适用于家庭,终端和电源按钮。 – Vignesh 2011-05-06 07:06:19

+0

奇数:这对我很有用,至少在Home和Back按钮中有效。我不确定END按钮:不知道END有一个物理按钮。另外,对于HOME,您可能需要将您的活动设置为主屏幕(否则我相信Android会过滤掉该按键)。我不认为你可以捕获POWER按钮:在我看来,这将是一个主要的安全问题:有人可能会写一些拒绝让你关闭设备的东西。所以你可能在电源按钮上运气不好。 – Femi 2011-05-06 13:15:38

+0

嗨Femi,我不需要听结束按钮或电源按钮,我只想听只有主页按钮,我只是告诉你,家庭,结束和权力不工作的听众。 – Vignesh 2011-05-09 04:16:51

这是唯一可能的,如果你修改主要的android源代码。虽然这不建议用于应用程序目的。但更多的隐藏菜单。

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) 

你可以试试这个在Android 4.0以上版本:
1.注册一个BroadcastReceiver为Intent.ACTION_CLOSE_SYSTEM_DIALOGS。
2.调用Intent.getStringExtra(“reason”)来获取原因。原因如下:
家庭按键的“homekey”按下;
“帮助”长按Home键;