Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当活动堆栈为空时从通知启动的活动充当主活动_Android - Fatal编程技术网

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

Android 当活动堆栈为空时从通知启动的活动充当主活动,android,Android,在我的应用程序中,A是主要活动。其导航方式类似于A、B、C、D等。 我实现了谷歌云推送通知。当推送通知到来时,通知生成并单击它将转到活动X。当堆栈不为空时,就没有问题。当堆栈为空且从推送通知启动的活动x作为启动活动时。这意味着如果我们长按home按钮并选择应用程序导航到x活动(从通知启动的活动),堆栈再次为空时而不是活动。请帮助我。最简单的方法是覆盖并完成活动 来自文档关于受保护的voidonUserLeaveHint() 当活动即将启动时,作为活动生命周期的一部分调用 进入后台作为用户选择的结

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

最简单的方法是覆盖并完成活动

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

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

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

Psuedo代码

    @Override
    protected void onUserLeaveHint() {
        super.onUserLeaveHint();
        finish();
    }
您也可以查看更多参考资料

UPDATE:
另一个检测HOME键是否按下的方法是在ActivityManager中检查活动。按下主页按钮后,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;
            }
        }
    }
@覆盖
受保护的void onUserLeaveHint(){
super.onUserLeaveHint();
Log.e(“onUserLeaveHint(),“Yes”);
ActivityManager ActivityManager=(ActivityManager)
getSystemService(Context.ACTIVITY\u服务);
列出最近的任务=activityManager
.getRunningTasks(整数.MAX_值);
对于(int i=0;i-1){
Log.e(“主压”、“是”);
打破
}
}
}
另外,不要忘记添加

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


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

但我必须在堆栈为空时启动主活动。但是,当堆栈为空且从通知启动活动时,它将在稍后充当启动活动。是的,您可以检测何时按下“主页”按钮并完成活动。