Подтвердить что ты не робот

Запрос оператора при нажатии кнопки "Назад"

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

Обновление: Приложение также должно спросить, пытается ли пользователь выйти из приложения с помощью кнопки (в самом приложении), а не на жестком диске Back.

4b9b3361

Ответ 1

Спросите разрешения пользователя, чтобы закрыть приложение.

Вы можете сделать это следующим образом;

/**
 * Exit the app if user select yes.
 */
private void doExit() {

    AlertDialog.Builder alertDialog = new AlertDialog.Builder(
            AppDemoActivity.this);

    alertDialog.setPositiveButton("Yes", new OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            finish();
        }
    });

    alertDialog.setNegativeButton("No", null);

    alertDialog.setMessage("Do you want to exit?");
    alertDialog.setTitle("AppTitle");
    alertDialog.show();
}

Где лучше всего спросить пользователя, хочет ли он выйти из приложения, когда он нажал кнопку "Назад"?

Так как вы хотите сообщить пользователю, когда он (и) щелкнул жесткую кнопку "назад", как предлагают другие, вы можете переопределить метод onBackPressed() и вызвать оттуда вышеупомянутый метод;

@Override
public void onBackPressed() {

    doExit();
}

Как предлагает @Martyn, вы можете использовать onKeyDown для достижения того же самого;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    if(keyCode == KeyEvent.KEYCODE_BACK) {
        doExit();
    }

    return super.onKeyDown(keyCode, event);
}

Приложение также должно спросить, пытается ли пользователь выйти из приложения с помощью кнопки (в самом приложении), а не кнопки "Назад".

Для этого вызовите doExit() с вашей кнопки onClick;

Button exitButton = (Button)findViewById(R.id.exitButton);
exitButton.setOnClickListener(new android.view.View.OnClickListener() {

    @Override
    public void onClick(View v) {
        doExit();
    }
});


Связанная информация:

Ответ 3

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

Ответ 4

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

Док говорит:

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

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

Ответ 5

Это довольно старый вопрос, но он занимает высокое место в Google, поэтому я подумал, что ему может потребоваться обновление:

@Override
public void onBackPressed() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Do you want to exit the app?");

    // if user presses "Exit", then he is allowed to exit from application
    builder.setPositiveButton("Exit", (dialog, which) -> finish());

    // if user selects "Stay", just cancel this dialog and continue with app
    builder.setNegativeButton("Stay", (dialog, which) -> dialog.cancel());

    builder.create().show();
}