Show yes / No перед выходом из приложения с помощью кнопки «Назад»

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

Его достаточно легко подключить onkeypressed() , но как я могу понять, что это «последнее» действие в задаче?

Solutions Collecting From Web of "Show yes / No перед выходом из приложения с помощью кнопки «Назад»"

Я думаю, вы можете использовать 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 } } 

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

Просмотрите Основы Android-приложений , это нарушает продвинутое поведение приложения для Android:

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

Афайк, нет.

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

FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY

FLAG_ACTIVITY_NO_HISTORY

FLAG_ACTIVITY_REORDER_TO_FRONT

FLAG_ACTIVITY_SINGLE_TOP