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