Как проверить, какая биометрия поддерживается на уровне API 28+? - PullRequest
2 голосов
/ 30 октября 2019

Я хочу проверить, какие биометрии поддерживаются на устройствах Android с уровнем API 28+, чтобы можно было показывать пользователям соответствующий текст. Например, «Войти по отпечатку пальца», «Войти по лицу», «Войти по Iris», «Включить вход по отпечатку пальца», «Включить вход по лицу» и т. Д.

Я использую BiometricManager.canAuthenticate () чтобы определить, можно ли использовать биометрию. Для версий старше 28 BiometricManager используется FingerprintManagerCompat внутренне, поэтому я знаю, что если результат BIOMETRIC_SUCCESS, устройство использует отпечаток пальца.

Есть ли способ узнать, какие биометрические данные поддерживаются - отпечаток пальца, лицо, радужка? Может быть, некоторые устройства могут поддерживать более одного.

Ответы [ 3 ]

3 голосов
/ 31 октября 2019

Только устройства с API29 предоставляют больше биометрических параметров, чем отпечатки пальцев.

Проверяя android.hardware.biometrics.BiometricManager.hasBiometrics() (API29), вы можете понять, как проверить, какие биометрические данные доступны:

final PackageManager pm = context.getPackageManager();
        return pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)
                || pm.hasSystemFeature(PackageManager.FEATURE_IRIS)
                || pm.hasSystemFeature(PackageManager.FEATURE_FACE);
2 голосов
/ 31 октября 2019

API BiometricManager, похоже, разработан таким образом, что вызывающее приложение должно быть независимым от используемого метода аутентификации. Таким образом, не имеет значения, как пользователь проходит аутентификацию, пока он успешен (наряду с этим предъявляются требования к строгой аутентификации на стороне поставщика https://source.android.com/security/biometric).

В результате, плохая вещь: вы не можете иметьзаголовок, соответствующий методу аутентификации, поэтому вы должны придумать что-то общее, например " Пожалуйста, авторизуйте операцию ". Хорошая новость заключается в том, что диалоговое окно уже отображается в соответствии с поддерживаемым методом аутентификации (например, для отпечатка пальца). При аутентификации пользовательский интерфейс отображает текст «Прикоснитесь к датчику отпечатков пальцев» вдоль соответствующего значка). Это выполняется платформой и не может контролироваться вызывающим приложением.

Частичное решение: вы можете специально проверить наличие отпечатка пальцааутентификация с использованием (в настоящее время не рекомендуется) API https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager

1 голос
/ 11 ноября 2019

Похоже, что невозможно определить реальный биометрический метод, используемый в Android (в отличие от iOS). Но на Android 10 можно обнаружить поддерживаемые биометрические методы:

PackageManager pm = context.getPackageManager();
boolean hasFingerprint = pm.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT);
boolean hasFace = pm.hasSystemFeature(PackageManager.FEATURE_FACE);
boolean hasIris = pm.hasSystemFeature(PackageManager.FEATURE_IRIS);

. Поэтому, если телефон поддерживает функцию только лица, вы можете использовать «Вход с лицом» в GUI. Если он поддерживает только функцию идентификации по отпечатку пальца, вы можете использовать «Вход с использованием отпечатка пальца» и т. Д.

Если он поддерживает несколько биометрических методов, вам придется использовать некоторый общий текст, например «Биометрический вход в систему».

...