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

时间:2015-04-16 10:56:09

标签: android android-homebutton android-background

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

4 个答案:

答案 0 :(得分:2)

我很遗憾地说,但所有建议的答案都已过时,其中一些是彻头彻尾的错误。

由于安全问题以及对恶意软件的恐惧(如果您可以拦截HOME,您可以尝试并劫持设备),直接拦截HOME以阻止回到Froyo。

我知道从HOME分离的唯一解决方案是截取onNewIntent()事件监听器。

应用程序运行时会触发

onNewIntent(),并收到另一个要启动的意图。这就是为什么当按下HOME时你会得到它。

按下BACK后,您的应用不会收到意图。所有这一切都将删除您之上的应用程序。因此,您的应用程序从后台堆栈中显示,只调用onResume()。

这就是你怎么说的。

还提到here。 古德勒克。

答案 1 :(得分:0)

当用户按下时,您应该会收到onBackPresssed的来电。您可以使用此设置标记,以便在onUserLeaveHint期间确定是否按下了后退按钮。记得事后清除旗帜。

答案 2 :(得分:0)

我找到了使用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;
    }
}

答案 3 :(得分:-2)

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

@Override
public void onBackPressed() {

}