如果用户反复按下后退按钮,我需要一种方法来检测他们何时处于我的任务/应用程序的最后一个活动并显示“你想退出吗?” 在他们返回主屏幕或他们之前运行的任何应用程序之前的对话框。
它很容易挂钩onkeypressed()
,但我如何确定这是任务中的“最后一个”活动?
如果用户反复按下后退按钮,我需要一种方法来检测他们何时处于我的任务/应用程序的最后一个活动并显示“你想退出吗?” 在他们返回主屏幕或他们之前运行的任何应用程序之前的对话框。
它很容易挂钩onkeypressed()
,但我如何确定这是任务中的“最后一个”活动?
我认为您可以在 Activity 中使用这样的 smth 来检查它是否是最后一个:
private boolean isLastActivity() {
final ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> tasksInfo = am.getRunningTasks(1024);
final String ourAppPackageName = getPackageName();
RunningTaskInfo taskInfo;
final int size = tasksInfo.size();
for (int i = 0; i < size; i++) {
taskInfo = tasksInfo.get(i);
if (ourAppPackageName.equals(taskInfo.baseActivity.getPackageName())) {
return taskInfo.numActivities == 1;
}
}
return false;
}
这还需要向您的 AndroidManifest.xml 添加权限:
<uses-permission android:name="android.permission.GET_TASKS" />
因此,在您的 Activty 中,您可以使用以下内容:
public void onBackPressed() {
if (isLastActivity()) {
showDialog(DIALOG_EXIT_CONFIRMATION_ID);
} else {
super.onBackPressed(); // this will actually finish the Activity
}
}
然后在你的对话框处理按钮点击调用Activity.finish()。
请查看Android Application Fundamentals,这违反了 Android 应用程序的推广行为:
当用户按下 BACK 键时,屏幕不会显示用户刚刚离开的活动(上一个任务的根活动)。相反,堆栈顶部的活动被删除,并显示同一任务中的前一个活动。
阿法克,没有。
您可以使用一些标志来影响历史堆栈,但都在您的应用程序中。用你的意图试试这个标志:
FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY