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