Выход из Android-приложения с кнопкой «Назад»

Я хочу, чтобы пользователи моего приложения Android оставили свое приложение, когда они нажимают на определенную активность. Это можно сделать?

Solutions Collecting From Web of "Выход из Android-приложения с кнопкой «Назад»"

Вы можете попробовать что-то вроде этого (показывает диалог для подтверждения выхода):

@Override public void onBackPressed() { new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") .setMessage("Are you sure you want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); System.exit(0); } }).setNegativeButton("No", null).show(); } 

Следует отметить, что в комментариях ниже указано, что выход из приложения с помощью System.exit не рекомендуется. Более «правильный» способ, вероятно, состоял бы в том, чтобы транслировать намерение по нажатой кнопке, и если действия вашего приложения получили это намерение, закончить сами.

Хороший способ – ждать второй секунды

 private boolean _doubleBackToExitPressedOnce = false; @Override public void onBackPressed() { Log.i(TAG, "onBackPressed--"); if (_doubleBackToExitPressedOnce) { super.onBackPressed(); return; } this._doubleBackToExitPressedOnce = true; Toast.makeText(this, "Press again to quit", Toast.LENGTH_SHORT).show(); new Handler().postDelayed(new Runnable() { @Override public void run() { _doubleBackToExitPressedOnce = false; } }, 2000); } 

Вы можете попробовать это

 public void onBackPressed() { moveTaskToBack(true); } 

Положите его в каждую деятельность вашего манифеста:

 <activity android:name=".MyActivity" android:noHistory="true"> </activity> 

На Назад нажмите с вашей Activity :

 @Override protected void onBackPressed() { if (this.isFinishing()){ finish(); super.onBackPressed(); } } 

Вы можете переопределить onBackPressed () в действии и делать все, что хотите в нем. Вот код, который выходит из приложения при нажатии на него:

 @Override public void onBackPressed(){ Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } 

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

Если вы хотите завершить все приложение с помощью кнопки «Назад», каждый раз, когда вы используете startActivity (), следуйте за ним с вызовом finish (). Это закроет текущую деятельность, когда вы уйдете, если пользователь нажмет кнопку «Назад», они оставят ваше приложение.

Вместо того, чтобы переопределять поведение кнопки «назад», рассмотрите использование флажка намерения FLAG_ACTIVITY_CLEAR_TOP для управления стеком действий вашего приложения.

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

Например, рассмотрите задачу, состоящую из действий: A, B, C, D. Если D вызывает startActivity () с намерением, который разрешает компонент активности B, то C и D будут завершены, а B получит заданное намерение , В результате чего стек теперь составляет: A, B.

Используя приведенный выше пример. Это будет реализовано примерно так: От деятельности D:

 Intent intent = new Intent(context, B.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); 

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

Но если вы хотите закрыть приложение, в случае, если работает только одно действие (во время нажатия кнопки возврата в вашем случае), закрытие этого действия закрывает все приложение. Я имею в виду, что если вы передали текущую активность с использованием намерения и не закрыли предыдущую активность, то с помощью this.finish() закрывает только текущую активность и возвращает вам предыдущую приостановленную активность, в противном случае она закрывает все приложение , Рассмотрите тот факт, что действие может использовать фрагмент, а фрагменты могут быть без макетов. То кажется, что приложение закрыто, пока оно все еще работает.

Но как использовать вспомогательный ключ оборудования для выполнения вашей работы? Вам нужно будет это сделать

 @Override public void onBackPressed() { if(/* check a condition to make sure you are in that certain activity */) { Process.killProcess(Process.myPid()); } else { super.onBackPressed(); } } 

Удачи

Я знаю, что это старый пост. Но это может быть полезно для кого-то, как и для меня, который хочет реализовать ту же функцию в своем приложении.

Решение для идентификации двойной спины может быть выполнено путем вычисления времени между двумя обратными нажатиями. Если разница меньше 2 секунд (т.е. 2000 миллисекунд), вы можете принять это как двойное обратное нажатие и выход из приложения. В противном случае отобразите сообщение Toast.

Простая реализация этого будет:

 private static long back_pressed; @Override public void onBackPressed() { if (back_pressed + 2000 > System.currentTimeMillis()) super.onBackPressed(); else Toast.makeText(getBaseContext(), "Press once again to exit!",Toast.LENGTH_SHORT).show(); back_pressed = System.currentTimeMillis(); } 

Код можно найти в этой ссылке

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

 @Override public void onBackPressed() { enter code here finish(); } 

Вы можете добиться чего-либо с помощью кнопки «Переопределение задней кнопки».

 @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { // Do whatever you want with your activity // And for closing the whole app, you can use System.exit() which is absolutely not recomended return true; } return super.onKeyDown(keyCode, event); } 
 @Override public void onBackPressed(){ new AlertDialog.Builder(this).setIcon(android.R.drawable.ic_dialog_alert).setTitle("Exit") .setMessage("Are you sure you want to exit?") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }).setNegativeButton("No", null).show(); } 

Вот готовый метод управления backPressed () при нажатии дважды за раз и вызов диалогового окна подтверждения:

 /** * Overrides Back Pressed Button handler. * Single continuous press custom clear in your activity. * Double continuous press - confirmation dialog to close all activities and exit to Android. */ @Override public void onBackPressed() { if (isBackPressedTwice) { new AlertDialog.Builder(this) .setCancelable(false) .setIcon( R.drawable.exit) .setTitle( getString( R.string.exit)) .setMessage( getString( R.string.close_application)) .setNegativeButton( getString( R.string.no), null) .setPositiveButton( getString( R.string.yes), new DialogInterface.OnClickListener() { @Override public void onClick( DialogInterface dialog, int which) { finishAffinity(); return; } }) .show(); } else { // Custom activity clearing operations. } this.isBackPressedTwice = true; new Handler().postDelayed( new Runnable() { @Override public void run() { isBackPressedTwice = false; } }, 1000); }