Обнаружение вкл/выкл

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

Ответ 1

От христианского ответа на этот вопрос:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (event.getKeyCode() == KeyEvent.KEYCODE_POWER) {
        // do what you want with the power button
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

Однако Джейк Базиль прав. Если у вас есть действительно веская причина делать что-то особенное при нажатии кнопки питания, вы должны использовать стандартные функции жизненного цикла Android.

Когда нажата кнопка питания, он вызовет метод onPause() вашего приложения, а когда вы разблокируете устройство, он будет вызывать onResume(). Здесь вы должны управлять своим потоком, чтобы предотвратить сбой приложения.

документация по Activity даст вам подробное описание функций жизненного цикла, когда они будут вызваны, и как вы должны их использовать, enter image description here

Ответ 2

Используйте методы onPause и onResume. Они вызывается, когда ваше приложение больше не находится на переднем плане (когда появляется экран блокировки) или когда телефон усыпляется, и когда ваше приложение возвращается на передний план.

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

Ответ 3

Многие ответы на этот вопрос игнорируют тот факт, что при написании приложения важно знать, какое событие вызвало конкретную стандартную функцию жизненного цикла Android. Существует функция onBackPressed(); почему бы не включить onPowerPressed() и onHomePressed()? Приложения часто должны выполнять разные вещи в стандартных функциях жизненного цикла, в зависимости от того, какое событие вызвало их. Сейчас очень больно выяснить, был ли вызван стандартный метод жизненного цикла в результате нажатия кнопки домашнего нажатия или нажатия кнопки питания.

Ответ 4

Чтобы определить, запускается или останавливается Android-приложение, вы можете использовать следующие правила:

  • Когда пользователь вводит, onResume всегда вызывается (по активности, которая будет текущей)
  • Когда пользователь уходит, onStop всегда вызывается (в текущей активности), за исключением случаев нажатия кнопки питания (для выключения), где вы можете видеть только вызов onPause.
  • Когда пользователь перемещается между действиями, onResume всегда вызывается для нового действия, а onStop всегда вызывается на старом. Вызов onResume всегда перед onStop

Дополнительная информация здесь: http://www.artificialworlds.net/blog/2015/06/05/detecting-whether-an-android-app-is-stopping-or-starting/

Ответ 6

Переопределите методы жизненного цикла. Решение для обнаружения нажатия кнопки питания, которая была выбрана в качестве ответа, больше не разрешено в Android()