【问题标题】:show dialog yes/No before leaving the app via Back button在通过返回按钮离开应用程序之前显示对话框是/否
【发布时间】:2011-05-02 00:48:24
【问题描述】:

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

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

【问题讨论】:

  • 您确定要这样做吗?听起来相当烦人。用户很快就知道返回的含义,并明白他们可能正在退出应用程序..
  • 投反对票是怎么回事?它明确表示要否决“不清楚或无用”的问题,这两者都不是。这可能不是推荐的做事方式,但我不认为这个问题应该被否决。投票支持。

标签: android user-interface button dialog back


【解决方案1】:

我认为您可以在 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()。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我希望我们生活在一个完美的世界里,但是,唉。客户想要对话。那么,有没有办法查看全局活动/任务堆栈?
    • 是的,我同意客户想要他们曾经喜欢的东西。对于某些类型的客户,我们不能说“不”,只需要做他们想做的事。检查我的答案,了解如何做你需要的。
    【解决方案3】:

    Afaik,没有。

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

    FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

    FLAG_ACTIVITY_NO_HISTORY

    FLAG_ACTIVITY_REORDER_TO_FRONT

    FLAG_ACTIVITY_SINGLE_TOP

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多