2015-04-16 2 views
2

Я разрабатываю приложение для Android, в котором, когда приложение находится в фоновом режиме, оно отображает в строке состояния уведомление. Использование onUserLeaveHint Я могу определить, когда пользователь нажимает кнопку HOME, но тот же самый прослушиватель событий также запускается, когда пользователь нажимает кнопку BACK. Как я могу обнаружить только нажатия кнопки HOME?Detect HomeButton нажал Android до onBackPressed

+0

Вы пробовали переопределить onKeyDown и проверить KeyEvent.KEYCODE_HOME? – Breadbin

+0

@Breadbin 'KeyEvent.KEYCODE_HOME' не перехватывается в' onKeyDown' со времен Froyo и Gingerbread. –

ответ

2

Мне жаль говорить, но все предложенные ответы устарели и некоторые из них совершенно неправильно.

Перехват HOME непосредственно был заблокирован назад на Froyo из-за проблем с безопасностью и страхами вредоносного ПО (если вы можете перехватить HOME, вы можете попробовать и захватить устройство).

Единственное решение, которое я знаю о том, что разделяет BACK из HOME, - это перехват прослушивателя событий onNewIntent().

onNewIntent() увольняется, когда приложение запущено, и получает другое намерение запускаться. Вот почему вы получите его, когда HOME нажата.

Когда нажата кнопка BACK, ваше приложение не получит намерения. Все, что происходит, это то, что приложения поверх вас удалены. Таким образом, ваше приложение появляется из заднего стека только с вызовом onResume().

Так вот как вы можете это сказать.

Также упоминается here. Goodluck.

0

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

+0

Я пробую это решение. Но иногда он вызывает onUserLeaveHint перед onBackPressed, поэтому я не могу установить флаг. –

-1

Вы можете просто отключить кнопку «Назад» для этой конкретной страницы. Вот что работает для меня:

@Override 
public void onBackPressed() { 

} 
+0

Мне нужно onBackPressed ... –

+0

Переопределение 'onBackPressed' противоречит списку приложений для Android (http://developer.android.com/distribute/essentials/quality/core.html). Приложение не переопределяет ожидаемую функцию значок системы (например, кнопка «Назад»). –

0

Я нашел решение, используя 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; 
    } 
} 
Смежные вопросы