【问题标题】:Activity launched from notification when activity stack is empty act as the main activity当活动堆栈为空时从通知启动的活动作为主要活动
【发布时间】:2012-08-27 04:25:49
【问题描述】:

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

【问题讨论】:

    标签: android


    【解决方案1】:

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

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

    在活动即将开始时作为活动生命周期的一部分调用 作为用户选择的结果进入后台。例如,当 用户按下 Home 键,onUserLeaveHint() 将被调用,但是 当来电导致通话中活动 自动带到前台,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找到。

    【讨论】:

    • 但是当堆栈为空时我必须启动主要活动。但是当堆栈为空并从通知中启动活动时,它稍后会充当启动活动。
    • 是的,您可以检测何时按下主页按钮并完成活动。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-24
    • 2013-01-20
    • 1970-01-01
    相关资源
    最近更新 更多