Я разрабатываю приложение для Android, в котором, когда приложение находится в фоновом режиме, в строке состояния отображается уведомление. Используя onUserLeaveHint
, я могу определить, когда пользователь нажимает кнопку HOME, но тот же прослушиватель событий также срабатывает, когда пользователь нажимает кнопку BACK. Как определить только нажатия кнопки HOME?
Обнаружить кнопку HomeButton, нажатую Android до onBackPressed
Ответы (4)
Извините, но все предложенные ответы устарели, а некоторые из них совершенно неверны.
Прямой перехват HOME был заблокирован еще на Froyo из-за проблем с безопасностью и боязни вредоносных программ (если вы можете перехватить HOME, вы можете попытаться захватить устройство).
Единственное известное мне решение, которое отделяет BACK от HOME, — это перехватить прослушиватель событий onNewIntent()
.
onNewIntent()
запускается, когда приложение запущено, и получает другое намерение для запуска. Вот почему вы получите его, когда нажмете ДОМОЙ.
При нажатии НАЗАД ваше приложение не получит намерение. Все, что происходит, это то, что приложения поверх ваших удаляются. Таким образом, ваше приложение появляется из заднего стека с вызовом только onResume().
Так вот как вы можете сказать.
Он также упоминается здесь. Удачи.
Когда пользователь нажимает назад, вы должны получить вызов onBackPresssed
. Вы можете использовать это, чтобы установить флаг, чтобы во время onUserLeaveHint
можно было определить, была ли нажата кнопка «Назад». Не забудьте после этого очистить флаг.
Я нашел решение, используя метод onStop()
и onResume()
. это мой код
@Override
public void onBackPressed() {
Intent intent = new Intent(this, PagerActivity.class);
startActivity(intent);
finish();
}
/* Handle notification create/destroy */
private Boolean notificationCreated = false;
@Override
protected void onStop() {
Utils.createNotification();
notificationCreated = true;
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
if (notificationCreated)
{
Utils.cancelNotification();
notificationCreated = false;
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (notificationCreated) {
Utils.cancelNotification();
notificationCreated = false;
}
}
Вы можете просто деактивировать кнопку «Назад» для этой конкретной страницы. Вот что работает для меня:
@Override
public void onBackPressed() {
}
onBackPressed
противоречит контрольному списку приложений для Android (developer.android.com/distribute/ essentials/quality/core.html) Приложение не переопределяет ожидаемую функцию системного значка (например, кнопки «Назад»).
- person Royi Benyossef; 16.04.2015
KeyEvent.KEYCODE_HOME
не перехватывается вonKeyDown
со времен Froyo и Gingerbread. - person Royi Benyossef   schedule 16.04.2015