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