Метод вызова при нажатии кнопки home на андроиде

Поэтому у меня есть этот метод в одном из моих Android-упражнений:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { Log.d("Test", "Back button pressed!"); } else if(keyCode == KeyEvent.KEYCODE_HOME) { Log.d("Test", "Home button pressed!"); } return super.onKeyDown(keyCode, event); } 

Но, несмотря на то, что KEYCODE_HOME действителен, метод журнала никогда не срабатывает. Однако это работает для кнопки «Назад». Кто-нибудь знает, почему это так и как заставить это работать?

благодаря

Solutions Collecting From Web of "Метод вызова при нажатии кнопки home на андроиде"

Кнопка «Домой» – очень опасная кнопка для переопределения, и из-за этого Android не позволит вам переопределить ее поведение так же, как вы делаете кнопку BACK.

Взгляните на это обсуждение.

Вы заметите, что кнопка дома, похоже, реализована как призыв к намерениям, поэтому вам придется добавить категорию намерений в свою деятельность. Затем, в любое время, когда пользователь ударит по дому, ваше приложение будет отображаться как опция. Вы должны подумать над тем, что именно вы хотите выполнить с помощью кнопки «домой». Если он не заменит домашний экран устройства по умолчанию, я буду опасаться перегрузки кнопки HOME, но это возможно (за обсуждение в приведенном выше разделе).

Мне потребовался почти месяц, чтобы пройти через это. Сейчас я решил эту проблему. В вашей функции onPause () вы должны включить следующее условие if:

  if (this.isFinishing()){ //Insert your finishing code here } 

Функция isFinishing () возвращает логическое значение. Истинно, если ваше приложение действительно закрывается, False, если ваше приложение все еще работает, но, например, экран отключается.

Надеюсь, поможет!

Я обнаружил, что когда я нажимаю кнопку HOME, вызывается метод onStop (). Вы можете использовать следующий фрагмент кода для его мониторинга:

 @Override protected void onStop() { super.onStop(); Log.d(tag, "MYonStop is called"); // insert here your instructions } 

Кнопка HOME не может быть перехвачена приложениями. Это поведенческое поведение в Android. Причина заключается в том, чтобы запретить злонамеренным приложениям получать контроль над вашим телефоном (если пользователь не может нажать кнопку «Назад» или «домой», он, возможно, никогда не сможет выйти из приложения). Кнопка «Домой» считается безопасной зоной пользователя и всегда запускает настроенное домашнее приложение пользователя.

Единственное исключение из вышеперечисленного – любое приложение, настроенное как домашняя замена. Это означает, что для соответствующего действия в AndroidManifest.xml указано следующее:

 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

При нажатии кнопки «домой» onNewIntent текущее действие onNewIntent текущего домашнего приложения.

У меня есть простое решение при обращении к домашнему нажатию кнопки. Вот мой код, это может быть полезно:

 public class LifeCycleActivity extends Activity { boolean activitySwitchFlag = false; @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { activitySwitchFlag = true; // activity switch stuff.. return true; } return false; } /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } @Override public void onPause(){ super.onPause(); Log.v("TAG", "onPause" ); if(activitySwitchFlag) Log.v("TAG", "activity switch"); else Log.v("TAG", "home button"); activitySwitchFlag = false; } public void gotoNext(View view){ activitySwitchFlag = true; startActivity(new Intent(LifeCycleActivity.this, NextActivity.class)); } } 

В качестве сводки, поставьте логическое значение в операции, когда произойдет действие переключателя активности (событие startactivity), установите переменную и в событии onpause проверьте эту переменную ..

Используйте onPause() чтобы сделать то, что вы хотите сделать на домашней кнопке.

KeyEvent.KEYCODE_HOME может быть перехвачен.

Было бы неплохо, если бы это было возможно.

(Edit) : Я просто вижу, что Никс отвечает, что совершенно отлично;)

Я также некоторое время боролся с кнопкой HOME. Я хотел остановить / пропустить фоновый сервис (который проверяет местоположение), когда пользователь нажимает кнопку HOME.

Вот что я реализовал как «хакерское» решение;

Сохранить состояние приложения в SharedPreferences с помощью логического значения

По каждому виду деятельности

OnResume () -> set appactive = true

OnPause () -> set appactive = false

И фоновая служба проверяет appstate в каждом цикле, пропускает действие

IF appactive = false

Он работает хорошо для меня, по крайней мере, не истощает батарею больше, надеюсь, что это поможет ….