1

我的android应用程序是一个客户端,当有人点击home键时,我想向服务器发送消息,而当用户变回应用程序时,我也想向服务器发送消息。如果我可以覆盖 HOME 按钮 keyEvent 或在应用程序进入后台时调用的任何方法,我可以发送消息并在单例中设置一个静态变量,每个 onStart() 都会检查它,所以基本上我只需要以某种方式“覆盖” HOME 按钮。我尝试了以下方法:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_HOME) {
        //...
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

它根本不起作用。我在里面放了一个断点,但是 HOME 按钮根本不会触发这个方法。(三星 Galaxy Ace,安卓 2.2.1)。

我也试图覆盖onUserLeaveHint()这样的:

@Override
protected void onUserLeaveHint() {
    //...
    super.onUserLeaveHint();
}

但问题是,这个方法不仅会在我按下 HOME 按钮或应用程序中断时被调用,而且当我只是导航到另一个活动(并完成当前活动)时。这个问题有什么解决办法吗?

4

2 回答 2

4

可能想看看这个Android Docs

您正在寻找 onPause / onResume,基于该行

或仅当应用程序进入后台时才会调用的任何方法

该文档应该解释堆栈是如何工作的,这将允许您完成这个问题。

于 2012-12-07T22:15:19.587 回答
1

这个问题没有一天的解决方案,因为android不允许你覆盖主页按钮。解决此问题的最简单方法是将代码放入 中onPause,但当然可以在不按下主页按钮的情况下调用它。

这里的第二个(不接受)答案有一个有趣的解决方案,但我没有尝试过,所以我不确定它是否有效

于 2012-12-07T22:15:26.463 回答