在通过“后退”按钮离开应用程序之前显示对话框是/否

时间:2010-10-28 17:44:26

标签: android user-interface button dialog back

如果用户反复按下后退按钮,我需要一种方法来检测他们在我的任务/应用程序的最后一个活动上的时间并显示“你想要退出吗?”对话框,他们返回主屏幕或他们以前运行的任何应用程序。

它很容易挂钩onkeypressed(),但我怎么知道这是任务中的“最后”活动?

3 个答案:

答案 0 :(得分:6)

我认为你可以在你的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
    }
}

然后在你的Dialog处理按钮点击以调用Activity.finish()。

答案 1 :(得分:2)

请查看Android Application Fundamentals,这违反了Android应用的推广行为:

当用户按下BACK键时,屏幕不显示用户刚刚离开的活动(上一个任务的根活动)。而是删除堆栈顶部的活动,并显示同一任务中的先前活动。

答案 2 :(得分:1)

Afaik,没有。

您可以使用一些标志来影响历史记录堆栈,但所有标记都在您的应用程序中。尝试使用你的Intent标志:

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

FLAG_ACTIVITY_NO_HISTORY

FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_SINGLE_TOP