Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在通过“后退”按钮离开应用程序之前显示“是/否”对话框_Android_User Interface_Button_Dialog_Back - Fatal编程技术网

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

Android 在通过“后退”按钮离开应用程序之前显示“是/否”对话框,android,user-interface,button,dialog,back,Android,User Interface,Button,Dialog,Back,如果用户反复按下后退按钮,我需要一种方法来检测他们何时处于我的任务/应用程序的最后一个活动中,并在他们返回主屏幕或之前运行的任何应用程序之前显示“是否要退出?”对话框 钩住onkeypressed()很容易,但如何确定这是任务中的“最后”活动 请查看,这违反了Android应用程序的升级行为: 当用户按下后退键时,屏幕不会显示用户刚刚离开的活动(上一个任务的根活动)。相反,将删除堆栈顶部的活动,并显示同一任务中的上一个活动。Afaik,没有 有几个标志可以用来影响历史堆栈,但都在应用程序中。您可

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

钩住
onkeypressed()
很容易,但如何确定这是任务中的“最后”活动

请查看,这违反了Android应用程序的升级行为:

当用户按下后退键时,屏幕不会显示用户刚刚离开的活动(上一个任务的根活动)。相反,将删除堆栈顶部的活动,并显示同一任务中的上一个活动。Afaik,没有

有几个标志可以用来影响历史堆栈,但都在应用程序中。您可以尝试以下方法:


我认为您可以在活动中使用类似的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;
}

然后在您的对话框中处理按钮,单击调用Activity.finish()。

确实要这样做吗?听起来很烦人。用户很快就知道后退意味着什么,并且知道他们可能会退出应用程序。投票结果是怎么回事?它明确表示,投票否决“不清楚或没有用处”的问题,这两者都不是。这可能不是推荐的做事方式,但我认为这个问题不应该因此而被否决。投票支持它。我希望我们生活在一个完美的世界,但唉。客户端需要该对话框。那么,有什么方法可以窥视全局活动/任务堆栈吗?是的,我同意客户想要他们曾经想要的东西。对于某些类型的客户,我们不能说“不”,只能做他们想做的事。检查我的答案,了解如何做你需要的事情。
<uses-permission android:name="android.permission.GET_TASKS" />
public void onBackPressed() {
    if (isLastActivity()) {
         showDialog(DIALOG_EXIT_CONFIRMATION_ID);
    } else {
         super.onBackPressed(); // this will actually finish the Activity
    }
}