在 onBackPressed 之前检测主页按钮按下 Android

Detect HomeButton pressed Android before onBackPressed

我正在开发一个 android 应用程序,当该应用程序处于后台时,它会在状态栏上显示一条通知。使用 onUserLeaveHint 我可以检测到用户何时按下 HOME 按钮,但当用户按下 BACK 按钮时也会触发相同的事件侦听器。 如何仅检测主页按钮按下?

当用户按下后退键时,您应该会收到对 onBackPresssed 的呼叫。您可以使用它来设置一个标志,以便您可以在 onUserLeaveHint 期间确定是否按下了后退按钮。之后记得清除flag。

您只需停用该特定页面的后退按钮即可。 这对我有用:

@Override
public void onBackPressed() {

}

我找到了使用 onStop()onResume() 方法的解决方案。 那是我的代码

@Override
public void onBackPressed() {
    Intent intent = new Intent(this, PagerActivity.class);
    startActivity(intent);
    finish();
}

/* Handle notification create/destroy */
private Boolean notificationCreated = false;

@Override
protected void onStop() {
    Utils.createNotification();
    notificationCreated = true;
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    if (notificationCreated)
    {
        Utils.cancelNotification();
        notificationCreated = false;
    }
}

@Override
protected void onDestroy() {
    super.onDestroy();
    if (notificationCreated) {
        Utils.cancelNotification();
        notificationCreated = false;
    }
}

很抱歉,所有建议的答案都已过时,其中一些是完全错误的。

由于安全问题和对恶意软件的恐惧,直接拦截 HOME 在 Froyo 上被阻止(如果你可以拦截 HOME,你可以尝试劫持设备)。

我知道将 BACK 与 HOME 分开的唯一解决方案是拦截 onNewIntent() 事件侦听器。

onNewIntent() 在应用程序 运行 时触发,并收到另一个要启动的意图。这就是为什么你会在按下 HOME 时得到它。

按下 BACK 后,您的应用将不会接收到 Intent。所发生的一切只是你上面的应用程序被删除了。所以你的应用程序出现在后台堆栈中,只有 onResume() 被调用。

这就是你的判断方式。

也提到了here。 祝你好运。