Как определить, требуется ли PIN-код / пароль / шаблон для разблокировки телефона?

#android #locking #unlock

#Android #блокировка #разблокировать

Вопрос:

Как я могу определить, заблокирован ли телефон паролем, PIN-кодом или шаблоном?

Спасибо!

Ответ №1:

Два метода

  1. Проверка программно — API 16

https://gist.github.com/doridori/54c32c66ef4f4e34300f

Обратите внимание, что вам не нужно проверять разблокировку по лицу, поскольку для этого требуется, чтобы был установлен запасной PIN-код / пароль.

  1. Политики администратора устройства

Вы также можете ознакомиться с политиками администратора устройства, которые допускают ограничения на настройку приложения в отношении безопасности, включая ограничения, установленные pin / pass

Кроме того, это типы блокировок, которые вы хотите проверить при использовании зашифрованного Keystore . Проверьте здесь для получения дополнительной информации.

Комментарии:

1. Похоже, теперь вы можете проверить наличие всех трех типов блокировок с помощью Keyguard «LOCK_PATTERN_ENABLED — эта константа устарела на уровне API 23. Используйте KeyguardManager для определения состояния и уровня безопасности keyguard. Доступ к этому параметру из приложения, предназначенного для M или более поздней версии, вызывает исключение SecurityException «. developer.android.com/reference/android/provider /…

2. Ваше право. KeyguardManager.isKeyGuardSecure() теперь возвращает «true, если установлен PIN-код, шаблон или пароль или заблокирована SIM-карта». с 23

3. @Don Вы имеете в виду, что до 23 isKeyguardSecure не возвращал true, когда устройство было заблокировано шаблоном? Это не то, что говорится в документации. И это было бы довольно глупо. Похоже, что isKeyguardSecure всегда возвращал true для PIN-кода, шаблона или пароля, начиная с API 16, когда он был введен. Я протестировал его на 19, и это то, что он делает.

4. @Don Итак, ваш код на github кажется слишком сложным для API 16 , isPatternSet является избыточным. Я дал ответ с более простой версией.

Ответ №2:

Вы можете использовать настройки.Защищенный класс для запроса информации о безопасности, установленной на устройстве Android. Например, чтобы узнать, включен ли у пользователя шаблон блокировки, вы должны сделать:

 ContentResolver cr = getContentResolver();
int lockPatternEnable = 
  Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED);
 

lockPatternEnable тогда будет 0, если он не был включен, и 1, если он был включен.

Комментарии:

1. Разве это не даст вам только если включен шаблон блокировки, но не если включен Pin-код. На моем телефоне есть как Pin-код, так и шаблон, и на самом деле это 2 разных состояния.

2. Хммм. Мне нужно будет провести еще несколько исследований. На данный момент похоже, что мы знаем только, как проверить, включен ли режим блокировки.

3. но я получаю исключение, говорящее 12-26 17:25:39.176: android.provider. Настройки $ SettingNotFoundException: lock_pattern_autolock ..могу ли я узнать, как это решить

4. KeyguardManager.isKeyguardSecure() будет иметь значение true, если установлен PIN-код или пароль

5. lockPatternEnable выдает 0, даже если он установлен Moto G5 Plus !! Есть идеи, как это можно решить?

Ответ №3:

Согласно документации, это должно быть нормально для Android API 16 и выше. Я протестировал его на 19, и, похоже, он работает.

 private boolean IsDeviceSecured () {
    KeyguardManager keyguardManager =
            (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE); //api 16 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        return keyguardManager.isDeviceSecure();
    }
    return keyguardManager.isKeyguardSecure ();
}