活动堆栈为空时从通知启动的活动充当主要活动

时间:2012-08-27 04:25:49

标签: android

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

1 个答案:

答案 0 :(得分:2)

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

来自关于受保护的onUserLeaveHint()

的文档
  

当活动即将到来时,被称为活动生命周期的一部分   作为用户选择的结果进入后台。例如,何时   用户按下Home键,将调用onUserLeaveHint(),但是   当来电通话导致通话活动时   自动带到前台,onUserLeaveHint()不会   呼吁活动被打断。在调用它的情况下,   在活动的onPause()回调之前调用此方法。

     

此回调和onUserInteraction()旨在帮助活动   智能地管理状态栏通知;特别是   帮助活动确定取消通知的适当时间。

Psuedo Code,

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

您还可以查看this answer以获取进一步的参考。

UPDATE:

按下检测HOME键的另一个工作是检查ActivityManager中的Activity。按下HOME按钮时,BaseActivity将保留在活动列表中的第二个位置。所以你可以使用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找到进一步的参考。