показать диалог да / нет перед выходом из приложения с помощью кнопки «Назад» - PullRequest
5 голосов
/ 28 октября 2010

Если пользователь несколько раз нажимает кнопку «Назад», мне нужен способ определить, когда он выполняет последнюю операцию моего задания / приложения, и показать «Вы хотите выйти? перед тем, как вернуться на главный экран или в какое-либо предыдущее приложение, в котором они работали.

Достаточно легко зацепить onkeypressed(), но как мне выяснить, что это "последнее" действие в задании?

Ответы [ 3 ]

6 голосов
/ 28 октября 2010

Я думаю, что вы можете использовать что-то подобное в своей деятельности, чтобы проверить, является ли оно последним:

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

Затем в диалоговом окне youd нажмите кнопку, чтобы вызвать Activity.finish ().

2 голосов
/ 28 октября 2010

Ознакомьтесь с Основами приложения Android , это нарушает продвигаемое поведение приложения Android:

Когда пользователь нажимает клавишу BACK, на экране не отображается активность, которую пользователь только что покинул (корневая активность предыдущей задачи). Вместо этого действие в верхней части стека удаляется, и отображается предыдущее действие в той же задаче.
1 голос
/ 28 октября 2010

Афаик, нет.

Есть несколько флагов, которые вы можете использовать, чтобы влиять на стек истории, но все они в вашем приложении. Попробуйте эти флаги с вашим Намерением:

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

FLAG_ACTIVITY_NO_HISTORY

FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_SINGLE_TOP

...