0

在我的应用程序中,A 是主要的 Activity。它导航类似 A、B、C、D 等的东西。我实现了谷歌云推送通知。当推送通知来时,通知产生并单击它转到活动 X。当堆栈不为空时没有问题。当堆栈为空并且从推送通知启动的活动 x 充当启动活动时。这意味着如果我们长按主页按钮并选择应用程序导航到 X 活动(从通知启动的活动)而不是 A 活动,则当堆栈再次为空时。请帮我。

4

1 回答 1

2

最简单的事情是覆盖onUserLeaveHint()并完成您的活动,

来自有关受保护无效的文档onUserLeaveHint()

当活动由于用户选择而即将进入后台时,作为活动生命周期的一部分调用。例如,当用户按下 Home 键时,会调用 onUserLeaveHint(),但是当有来电导致通话中的 Activity 自动被带到前台时,被中断的 Activity 不会调用 onUserLeaveHint() . 如果调用它,则在活动的 onPause() 回调之前调用此方法。

这个回调和 onUserInteraction() 旨在帮助活动智能地管理状态栏通知;具体来说,用于帮助活动确定取消通知的适当时间。

伪代码,

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

您还可以检查this answer以供进一步参考。

UPDATE:

检测您的 HOME 键被按下的另一个解决方法是检查 ActivityManager 中的 Activity。当按下 HOME 按钮时,您的 BaseActivity 将保持在 Activity Lists 中的第二个位置。因此,您可以使用 ActivityManager 进行检查,如下所示,

 @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        Log.e("onUserLeaveHint()", "Yes");
        ActivityManager activityManager = (ActivityManager)
                                getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> recentTasks = activityManager
                                       .getRunningTasks(Integer.MAX_VALUE);
        for (int i=0; i<recentTasks.size(); i++) {
            if (i == 1 && recentTasks.get(i).baseActivity.toShortString()
                                        .indexOf(getPackageName()) > -1) {
                Log.e("Home Pressed", "Yes");
                break;
            }
        }
    }

另外,不要忘记添加

<uses-permission android:name="android.permission.GET_TASKS"/>

AndroidManifest 文件中的权限。进一步的参考可以从 中找到this blog

于 2012-08-27T04:45:50.330 回答