Android - обнаружение события разблокировки телефона, а не экрана - PullRequest
54 голосов
/ 10 августа 2010

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

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

Ответы [ 4 ]

61 голосов
/ 10 августа 2010

Вот что нужно сделать:

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

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

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

21 голосов
/ 24 февраля 2015

Поработав некоторое время, я обнаружил, что лучший способ сделать это - зарегистрировать 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            

        }
    }
}
4 голосов
/ 20 ноября 2016
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);
1 голос
/ 10 августа 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...