Переопределите кнопку "Назад" для действия как кнопка "Домой"

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

В документах Android это указывает:

... не все операции имеют поведение, что они уничтожаются, когда НАЗАД нажимается. Когда пользователь начинает играть музыку в Музыкальном приложении и затем оттесняет, приложение переопределяет нормальное заднее поведение, препятствуя тому, чтобы действие плеера было уничтожено, и продолжает играть музыку, даже при том, что ее действие больше не видимо

Как я копирую эту функциональность в своем собственном приложении?

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

  1. Получите нажатие кнопки "Назад" (как ниже) и затем назовите любой метод (методы) вызовами кнопки "Домой".

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            Log.d(this.getClass().getName(), "back button pressed");
        }
        return super.onKeyDown(keyCode, event);
    }
    
  2. Получите нажатие кнопки "Назад" и затем имитируйте нажатие кнопки "Домой".

  3. Получите нажатие кнопки "Назад", затем запустите Действие главного экрана, эффективно поместив Действие моего приложения в остановленное состояние.

Править: Я знаю о сервисах, и использую один в приложении, с которым связана эта проблема. Этот вопрос конкретно о помещении Действия в остановленное состояние, а не уничтоженное состояние при нажатии кнопки "Назад".

248
задан Real KEK 6 January 2017 в 22:55
поделиться

2 ответа

[

] В большинстве случаев для выполнения чего-либо в фоновом режиме необходимо создать [] Службу [], а ваша видимая [] Деятельность [] просто управляет этой [] Службой []. (Я уверен, что Музыкальный проигрыватель работает таким же образом, поэтому пример в документах кажется немного вводящим в заблуждение). Если это так, то ваша []Деятельность [] может []закончиться [], как обычно, и []Служба [] будет продолжать работать.[

]. [

]Проще захватить кнопку []Назад [] и вызвать [] moveTaskToBack(true)[] следующим образом:[

]. [
// 2.0 and above
@Override
public void onBackPressed() {
    moveTaskToBack(true);
}

// Before 2.0
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
] [

] Я думаю, что предпочтительным вариантом должно быть нормальное завершение Действия и возможность воссоздания себя, например, чтение текущего состояния из Службы, если это необходимо. Но []moveTaskToBack[] можно иногда использовать как быструю альтернативу.[

]. [

] [] ПРИМЕЧАНИЕ []: как отметил Дейв ниже, в Android 2.0 появился новый метод []onBackPressed[], и [] эти рекомендации [] о том, как работать с кнопкой Back.[

].
334
ответ дан 23 November 2019 в 03:00
поделиться
[

] Если вы хотите поймать кнопку "Назад", взгляните на [] это сообщение в блоге разработчиков Android []. Он описывает более простой способ сделать это в Android 2.0 и лучший способ сделать это для приложения, которое работает на 1.x и 2.0.[

]. [

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

]. [
] [

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

]. [
] [

] Похоже, они соответствуют вашим требованиям. [

]
23
ответ дан 23 November 2019 в 03:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: