Эта функциональность может быть легко реализована путем переопределения метода onBackPressed() основной деятельности. В этом примере, когда пользователь нажимает кнопку «Назад», приложение будет отображать тост в течение 4 секунд, после чего новое обратное нажатие немедленно прекратит действие приложения.
ref
Вы можете поместить его в BaseActivity, который расширяет активность, как это:
public class BaseActivity extends Activity{
private Toast toast;
private long lastBackPressTime = 0;
. . .
/**
* Prevent accidental app exit by requiring users to press back twice when
* the app is exiting w/in 4sec
*/
@Override
public void onBackPressed() {
if (this.lastBackPressTime < System.currentTimeMillis() - 4000) {
toast = Toast.makeText(this, "Press back again to close this app", 4000);
toast.show();
this.lastBackPressTime = System.currentTimeMillis();
} else {
if (toast != null) {
toast.cancel();
}
super.onBackPressed();
}
}
. . .
}
EDIT: ADDED ФРАГМЕНТ BACKSTACK СОВМЕСТИМОСТЬ
Для использования обнаружения последнего фрагмента в приложение bacstack whos использует исключительно фрагменты, я настоятельно рекомендую положить ваш dispatchKeyEvents в класс BaseActivity и реализовать вышеупомянутый метод следующим образом:
public class BaseActivity extends Activity {
public boolean dispatchKeyEvent(KeyEvent event) {
int backCount = getFragmentManager().getBackStackEntryCount();
int action = event.getAction();
int keyCode = event.getKeyCode();
FragmentManager fm = getFragmentManager();
. . .
case KeyEvent.KEYCODE_BACK :
if (action == KeyEvent.ACTION_DOWN && backCount == 0) {
onexitNotify();
}else {
fm.popBackStack();
}
return true;
default :
return super.dispatchKeyEvent(event);
}
}
/**
* Prevent accidental app exit by requiring users to press back twice when
* the app is exiting w/in 8sec
*/
private Toast toast;
private long lastBackPressTime = 0;
public void onexitNotify() {
if (this.lastBackPressTime < System.currentTimeMillis() - 8000) {
toast = Toast.makeText(this, "Press back again to close this app", 8000);
toast.show();
this.lastBackPressTime = System.currentTimeMillis();
} else {
if (toast != null) {
toast.cancel();
}
super.onBackPressed();
}
}
}
* Если вы используете 2.0+, onBackPressed() упрощает объем кода, необходимый так OnKeyDown() не требуется.
Per узоры Androd Рекомендации для:
Некоторые приложения Запрашивать, когда он собирается выйти. Кажется, что будет особенно распространяться с игровыми приложениями. Эта практика не соответствует в обычных приложениях. Запрос подтверждения будет нарушить нормальный рабочий процесс пользователя. Даже в играх, использующих эту опцию, необходимо внимательно рассмотреть .
'onBackpressed' был введен в API уровня 5, в то время как keydown был с API уровня 1. Кроме того, уровень API 5 - это Android 2.0. – Orlymee