2014-01-15 5 views
1

Я хочу запустить код только при нажатии кнопки «домой» (когда приложение отправлено на задний план). Я попытался использовать метод lifecycle, но проблема в том, что они также выполняются при запуске и других диалогах/действиях. Я просто хочу проверить, отправлено ли приложение на задний план. Как я могу это достичь?Как выполнить код при нажатии кнопки «Домой»?

+0

Почему вы хотите это сделать? –

+0

У меня есть активность, которая защищена паролем. Если пользователь вызывает это действие, а затем нажмите кнопку «домой» и снова вызовет приложение, будет показано то же самое действие. Я хочу убедиться, что если пользователь называет это действие, он должен указать свой пароль и когда он будет в этом действии, и нажмите кнопку «домой» и снова запустите приложение, действие должно быть запущено снова и не показывать ту же активность.потому что я могу использовать пароль, чтобы пойти в этом acitivty, а затем может отправить активность на задний план, а затем, если кто-то еще использует мой телефон и запускает приложение, он может видеть защищенную паролем активность – androidBeginner

ответ

0

Ну так как вы пишете код, который вы можете установить некоторые логические флаги при запуске явно другой acitivty, и проверить, что, когда ваша деятельность проходит через OnPause() ...

, если они являются ложными, это означает, что кто-то другое приостанавливает вашу деятельность.

Возможно, это не самое элегантное решение, но оно будет работать, если это единственная проблема, которая у вас есть.

+0

Я использую логические флаги, но я могу " t используйте onePause(), потому что onPause() также вызывается, когда я использую приложение и запускаю другое действие, например. Я не хочу всегда писать пароль при использовании приложения, но только тогда, когда приложение отправляется на задний план и снова началось – androidBeginner

+0

Вам нужно проверить логическое значение в 'onPause()'. Если это неверно, вы знаете, что другое действие не запускается. – Tunga

2

В onOptionsItemSelected(MenuItem item);, проверьте, чтобы увидеть, если элемент щелкнул кнопка домой:

EDIT:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     } 
     return super.onOptionsItemSelected(item); 
    } 
+0

sry не работает ... Я только хочу закончить текущую деятельность, когда нажата кнопка дома – androidBeginner

+0

Как вы настраиваете свой ActionBar? Отправьте код, и мы сможем вам помочь. Если вы пытаетесь завершить текущую активность при нажатии кнопки «Домой», просто добавьте финиш() в оператор case. – Submersed

+0

Да, я уже пробовал, но это не сработало. Он не обнаруживает событие homebutton. overriding onUserLeaveHint() работал для меня – androidBeginner

0

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

Таким образом, вы можете узнать, открыто ли ваше приложение. но это не относится только к домашней кнопке, а к кнопке «Назад» (последняя попытка закрыть приложение) или даже открыть другое приложение из панели уведомлений.

0

ОС Android убьет ваше приложение на бесплатные ресурсы, оно не останется в фоновом режиме все время. Используйте service, если вы хотите, чтобы ваше приложение продолжало работать в фоновом режиме.

+0

Что вы имеете в виду? Я не хочу, чтобы мое приложение работало в фоновом режиме. Я только что закончил свою текущую деятельность, когда приложение отправлено в фоновом режиме (если нажата кнопка дома) – androidBeginner

+0

Я думал, что вы хотите, чтобы ваше приложение работало в фоновом режиме , Ваш первый вопрос не был достаточно ясным для меня, извините. Теперь я понимаю, что вы действительно хотите сделать. Хорошо, положите финиш(); внутри onpause(), потому что, когда пользователь нажимает кнопку «домой», ваше приложение будет вызывать метод onpause(). – rutulPatel

2

Activity.onUserLeaveHint() запускает вашу деятельность, когда действие будет заложено в результате действий пользователя, например, нажатие кнопки «домой» или переключение приложений.

+0

Отлично, это было то, что я искал – androidBeginner

+1

sry только что проверил ... он не работает должным образом ... этот метод также вызывается, когда запускается другая активность – androidBeginner

0

Если вы хотите делать, когда домашняя кнопка нажата и активность будет фон, вы можете переопределить это на активности:

@Override 
public boolean onKeyUp(int keyCode, KeyEvent event) 
{ 
    switch(keyCode) 
    { 
    case KeyEvent.KEYCODE_HOME: 

    //somthing you want to do 

    default: 
     return super.onKeyUp(keyCode, event); 

    } 
} 

Я использую событие KeyUp, потому что это, когда приложение идет Backgroud , пользователь может сделать longPress, и я не думаю, что вы хотите использовать этот метод, когда приложение все еще открыто.

0

Это своего рода чит-ответ, но я считаю его более надежным.

Один метод, который всегда называется, когда вы нажимаете кнопку дома, - это метод surfacedestroyed для любого surfaceviews, который содержится в любых действиях программы.

Ввод кода, который вы хотите выполнить там, когда метод указывает на другой метод, который вы хотите выполнить, или с запуском метода, который указывает на метод, который вы хотите выполнить, выполнит задание.

Смежные вопросы