Intereting Posts

Android – обнаружит событие разблокировки телефона, а не экран

Есть ли способ обнаружить, когда пользователь разблокирует телефон? Я знаю о ACTION_SCREEN_ON и ACTION_SCREEN_OFF , но они кажутся запущенными, когда экран включается / выключается при нажатии кнопки питания, но не на самом деле, когда телефон разблокируется при нажатии кнопки меню …

Я пытаюсь обнаружить разблокировку / блокировку во время работы, и я хочу возобновить действие после разблокировки.

Solutions Collecting From Web of "Android – обнаружит событие разблокировки телефона, а не экран"

Вот что делать:

Предположим, вы хотите обнаружить событие разблокировки и сделать что-то в своей деятельности, когда телефон разблокирован. Имейте широковещательный приемник для ACTION_SCREEN_ON, ACTION_SCREEN_OFF и ACTION_USER_PRESENT.

OnResume активности будет вызываться при активации ACTION_SCREEN_ON. Создайте обработчик и дождитесь ACTION_USER_PRESENT. Когда он уволен, реализуйте то, что вы хотите для своей деятельности.

Кредит идет на ответ CommonsWare здесь: Android – Что происходит, когда устройство разблокировано?

Поразмыслив об этом некоторое время, я обнаружил, что лучший способ сделать это – зарегистрировать BroadcastReceiver в действии «android.intent.action.USER_PRESENT».

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

Чтобы различать случаи, когда пользователь включил свой экран, когда он не был заблокирован, когда он действительно разблокирован, он использует KeyguardManager для проверки настроек безопасности.

Пример кода:

Добавьте это в свою деятельность:

 registerReceiver(new PhoneUnlockedReceiver(), new IntentFilter("android.intent.action.USER_PRESENT")); 

Затем используйте этот класс:

 public class PhoneUnlockedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { KeyguardManager keyguardManager = (KeyguardManager)context.getSystemService(Context.KEYGUARD_SERVICE); if (keyguardManager.isKeyguardSecure()) { //phone was unlocked, do stuff here } } } 
 public class PhoneUnlockedReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(Intent.ACTION_USER_PRESENT)){ Log.d(TAG, "Phone unlocked"); }else if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)){ Log.d(TAG, "Phone locked"); } } } 

Зарегистрировать получателя по этому заявлению

 receiver = new PhoneUnlockedReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_USER_PRESENT); filter.addAction(Intent.ACTION_SCREEN_OFF); registerReceiver(receiver, filter); 

Не тестировал, но попробуйте следующее:

  • Подождите ACTION_SCREEN_ON .
  • (После того, как экран включен,) Подождите ACTION_MAIN с категорией CATEGORY_HOME (который запускает главный экран). Вероятно, это то, что отправлено после разблокировки телефона.

1-й шаг необходим для фильтрации обычных нажатий клавиш HOME.