#android #locking #unlock
#Android #блокировка #разблокировать
Вопрос:
Как я могу определить, заблокирован ли телефон паролем, PIN-кодом или шаблоном?
Спасибо!
Ответ №1:
Два метода
- Проверка программно — API 16
https://gist.github.com/doridori/54c32c66ef4f4e34300f
Обратите внимание, что вам не нужно проверять разблокировку по лицу, поскольку для этого требуется, чтобы был установлен запасной PIN-код / пароль.
- Политики администратора устройства
Вы также можете ознакомиться с политиками администратора устройства, которые допускают ограничения на настройку приложения в отношении безопасности, включая ограничения, установленные 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 ();
}