Это уже какое-то время сводит меня с ума.
Есть ли способ надежно определить, была ли нажата кнопка домой в приложении для Android?
Если это не удается, есть ли надежный способ узнать, что заставило действие перейти в onPause? т.е. можем ли мы определить, было ли это вызвано запуском нового действия или нажатием кнопки «Назад / домой».
Одно из предложений, которое я видел, - переопределить onPause () и вызвать isFinishing (), но это вернет false при нажатии кнопки домой, как если бы начиналось новое действие, поэтому это не позволяет различить два.
Любая помощь очень ценится.
** Обновление **: спасибо @ android-hungry за эту ссылку: https://nishandroid.blogspot.com/
Преодоление следующего метода:
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
}
Тогда следующее событие БУДЕТ запускаться при нажатии кнопки домой:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_HOME)
{
//The Code Want to Perform.
}
});
Я не уверен, есть ли у этой строки какие-либо побочные эффекты:
this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
Таким образом, может показаться, что вопреки распространенному мнению, на самом деле вы можете услышать домашний ключ. К сожалению, вы можете вернуть false, и домашний ключ ничего не сделает.
Обновление : как и ожидалось, здесь есть некоторые побочные эффекты - кажется, что встроенные видео и карты Google не отображаются в этом режиме.
Обновление : предположительно, этот хак больше не работает, начиная с Android 4.0.
Activity.onUserLeaveHint()
.