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
}
}