Android - 如何捕获主页按钮被按下?

时间:2010-11-04 21:01:22

标签: android

我想在用户按下主页按钮时抓住。我以为我可以用

protected void onResume()
{
   registerReceiver(homeReceiver, new IntentFilter(Intent.CATEGORY_HOME));
}
...
private BroadcastReceiver homeReceiver = new BroadcastReceiver()
       {
          public void onReceive(Context context, Intent intent)
          {
             // logic here
          }
       };

但这似乎不起作用。我知道onPause会被调用,但我的特定应用程序有一些我需要单独处理的逻辑。短篇小说基于一些信息,应用程序将向用户显示新的活动。为了防止Back按钮问题,当每个Activity点击它的onStop时,它会调用自己完成。但是,如果用户按下主页按钮,我不希望活动调用完成,这样当用户按下主屏幕上的应用程序图标或通过最近运行的应用程序列表时,将返回最后一个活动。

我怀疑我使这比计划更复杂。任何建议都表示赞赏。

6 个答案:

答案 0 :(得分:3)

您可以监控活动的生命周期。按下主页按钮后,将调用以下方法:

onPause()
onStop()
onRestart()
onStart()
onResume()

当你开始新的活动:

onPause()
onStart()
onResume()
onStop()

当你从一些已经开始的活动回来时:

onPause()
onRestart()
onStart()
onResume()
onStop()

答案 1 :(得分:2)

我的英语不好(来自俄罗斯)。 是的,你无法抓住HOME按钮点击。我发现的唯一方法是读取log(logcat)并解析结果。当HOME活动运行时 - 下一条记录显示在logcat中:

开始活动:意图{act = android.intent.action.MAIN cat = [android.intent.category.HOME] flg = 0x10000000 cmp = com.android.launcher / .Launcher}

你可以通过正则表达式解析这个条目。所以,这是我发现点击HOME

的最好方法

答案 2 :(得分:1)

无法覆盖主页按钮。您只能捕捉意图并显示不同的家,但用户始终可以选择。

不要弄乱按钮如何工作这么多,用户喜欢一致的行为。

答案 3 :(得分:0)

  

按钮行为,我只是想知道   它被按下了所以我可以知道   不打电话onFinishnot呼吁onFinish - cbursk

你可以覆盖onPause()吗?如果按下主页按钮,则onFinish()未被调用...按下后退按钮时调用onFinish() ...后退按钮可以使用onKeyDown()覆盖,如下所示

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // action goes here
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

答案 4 :(得分:0)

长话短说,我放弃了试图抓住Home按钮被按下。我假设每个Activity在他们的onStop上调用自己的finish()是问题。因为我仍然需要在每个Activity上调用finish()以避免后退按钮问题,所以我更新了B,首先使用startActivityForResult启动新Activity,然后立即在上一个Activity上调用finishActivity。这似乎解决了整个问题。现在,当我按下主页按钮并最小化应用程序时,当我从主屏幕或主页最近运行的应用程序列表中选择应用程序的图标时,我将正确的活动带到前台。

现在我只需要找出原因 - 有时候 - 按下Home按钮会导致我的服务停止。但如果我无法理解,那将是一个新问题。谢谢大家的意见。

答案 5 :(得分:0)

最简单的方法是在退出该活动以进入其他某些活动时将布尔变量置为false。 然后在onResume方法中将变量设置为true。 检查方法onStop()是否为false,如果为true,则按下Home按钮。

类似的东西:

boolean exit=false;

...

//wherever other activity starting
exit=false;
startActivity(activity);

...

@Override
protected void onResume() {
    super.onResume();
    exit=true;
}

...

@Override
protected void onStop() {
    super.onStop();
    if(exit){
        //Home button is pressed
    }
}