Android - обнаружит событие разблокировки телефона, а не экран - программирование
Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

Здесь что делать:

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

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

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

Ответ 2

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

        }
    }
}

Ответ 3

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);

Ответ 4

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

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

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