Android нажатие кнопки возврата должно выйти из приложения - PullRequest
41 голосов
/ 01 марта 2010

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

Ответы [ 10 ]

87 голосов
/ 11 апреля 2012

В своей домашней активности я переопределяю «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);
 }

поэтому, если пользователь находится в домашнем активном режиме и нажимает назад, он переходит к начальному экрану.

Я взял код с Программный переход на домашний экран

42 голосов
/ 01 марта 2010

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

EDIT Что касается вашего комментария:

То, что вы предлагаете, это не то, как обычно работает поток приложений для Android, и как пользователи ожидают, что он будет работать. Что вы можете сделать, если действительно хотите, это убедиться, что каждый startActivity, ведущий к этому действию, является startActivityForResult и имеет прослушиватель onActivityResult, который проверяет код выхода, и пузыри что обратно. Вы можете узнать больше об этом здесь . В основном, используйте setResult перед завершением действия, чтобы установить код выхода по вашему выбору, и если ваша родительская активность получает этот код выхода, вы устанавливаете его в , что действие, и завершаете его и т. Д. ..

28 голосов
/ 05 мая 2013

Лучший пользовательский опыт:

/**
 * Back button listener.
 * Will close the application if the back button pressed twice.
 */
@Override
public void onBackPressed()
{
    if(backButtonCount >= 1)
    {
        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }
    else
    {
        Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
        backButtonCount++;
    }
}
2 голосов
/ 21 марта 2017

Использование onBackPressed метод

@Override
public void onBackPressed() {
    finish();
    super.onBackPressed();
}

Это решит вашу проблему.

2 голосов
/ 09 июня 2015

Приложение закроется только в том случае, если в заднем стеке нет никаких действий.Поэтому добавьте эту строку в манифесте android: noHistory = "true" ко всем действиям, которые вы не хотите возвращать в стек. А затем для закрытия приложения вызовите finish () в OnBackPressed

<activity android:name=".activities.DemoActivity"
            android:screenOrientation="portrait"
            **android:noHistory="true"**
            />
2 голосов
/ 29 октября 2010

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

Если вы беспокоитесь о том, что ваше приложение продолжает что-то делать в фоновом режиме.Обязательно остановите его в соответствующих командах onPause и onStop (которые будут срабатывать при нажатии пользователем Home).

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

1 голос
/ 17 января 2017

Чтобы выйти из приложения Android, просто используйте. в своей основной деятельности, или вы можете использовать файл манифеста Android для установки

android:noHistory="true"
1 голос
/ 01 октября 2015

Во-первых, Android не рекомендует делать это с помощью кнопки «назад», а использует методы жизненного цикла. Кнопка «Назад» не должна уничтожать активность.

Действия добавляются в стек, доступный из обзора (квадратная кнопка, поскольку они представили дизайн Материала в 5.0), когда кнопка «Назад» нажимается на последнем оставшемся действии из стека пользовательского интерфейса. Если пользователь хочет закрыть ваше приложение, ему следует удалить его (закрыть) из меню «Обзор».

Ваше приложение отвечает за остановку любых фоновых задач и заданий, которые вы не хотите запускать, в методах жизненного цикла onPause (), onStop () и onDestroy (). Пожалуйста, прочитайте больше о жизненных циклах и их правильной реализации здесь: http://developer.android.com/training/basics/activity-lifecycle/stopping.html

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

@Override
 public void onBackPressed() {

// make sure you have this outcommented
// super.onBackPressed();
 Intent intent = new Intent(Intent.ACTION_MAIN);
 intent.addCategory(Intent.CATEGORY_HOME);
 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(intent);
}
0 голосов
/ 09 марта 2018

Я изменил ответ @Vlad_Spays, чтобы кнопка «Назад» работала нормально, если только это не последний элемент в стеке, а затем запрашивает пользователя перед выходом из приложения.

@Override
public void onBackPressed(){
    if (isTaskRoot()){
        if (backButtonCount >= 1){
            Intent intent = new Intent(Intent.ACTION_MAIN);
            intent.addCategory(Intent.CATEGORY_HOME);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }else{
            Toast.makeText(this, "Press the back button once again to close the application.", Toast.LENGTH_SHORT).show();
            backButtonCount++;
        }
    }else{
        super.onBackPressed();
    }
}
0 голосов
/ 25 ноября 2014

завершите свою текущую деятельность, используя метод finish() onBack method of your current_activity

, а затем добавьте следующие строки в onDestroy current_activity для удаления Force close

@Override
public void onDestroy()
{
    android.os.Process.killProcess(android.os.Process.myPid());
    super.onDestroy();
}
...