Pull to refresh

Comments 12

Для такого отлавливаю нажатия по Back и в зависимости от текущей Activity что-то делаю:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
       //что-то делаем: завершаем Activity, открываем другую и т.д.
        
    }
    return super.onKeyDown(keyCode, event);
}

Я не хожу обсуждать, на сколько это хорошо или плохо. Единственное замечу, что для отлавливания Back у Activity есть метод onBackPressed()
Есть. Просто, чтобы отловить другие нажатия, onKeyDown всё равно придётся использовать.
Поэтому я переопределяю всегда только onKeyDown, а там уже switch использую.

Я ничего против статьи не хотел сказать, просто, так сказать, как альтернативу показал)
А вот нажатие на кнопку Home данный метод не отрабатывает

if (keyCode == KeyEvent.KEYCODE_HOME) {
Log.w(TAG, «KEY HOME PRESSED!»);
}
Если мне память не изменяет, то в Android с Home совсем другая история. Home гарантированно даёт возможность выйти из приложения. Поэтому в целях безопасности сложно её отловить, если вообще возможно.
Нельзя, так же, как и power button. Из соображений безопасности и энергопотребления.
Для Home есть хитрый хак — просто ставить себя приложению как Home-приложение
Это не хак.
Объявив себя ланчером вы все так же не можете перехватывать кнопку Home.
И если не выбран ланчер по умолчанию, всегда будет отображаться диалог выбора приложения рабочего стола.

Суммирую: для простого приложения (не ланчер или киоск апп), которое бы хотело узнать когда хотя бы просто нажата кнопка «домой», такой вариант не подходит.
есть же onUserLeaveHint()
FLAG_ACTIVITY_NEW_TASK — запускает Activity в новом таске. Если уже существует таск с экземпляром данной Activity, то этот таск становится активным, и срабатываем метод onNewIntent().
Флаг аналогичен параметру singleTop описанному выше


Возможно имеется ввиду «Флаг аналогичен параметру singleTask описанному выше».
Я могу ошибаться, но разве при долгом неиспользовании таска, таск очищается? Могут Activity завершится, но таск вроде сохраняется, а решение об очищении происходит на основании времени: т.е. прошло N-е количество времени и таск считается abandon и уже тогда чистится.
Насколько я помню, и это поведение можно переопределить, поставив флаг на корневой activity «android:alwaysRetainTaskState».
Последний абзац об этом и говорит. После долго периода чистится стек. Таск остаётся жить с корневой Activity.
Sign up to leave a comment.

Articles

Change theme settings