Android BiometricManager возвращает BIOMETRIC_ERROR_NONE_ENROLLED для распознавания лиц

В настоящее время я разрабатываю библиотеку биометрии для проекта и, похоже, не могу заставить работать распознавание лиц.

BiometricManager правильно работает с отпечатками пальцев на всех устройствах, которые я пробовал, однако он не обнаруживает никаких зарегистрированных биометрических данных лица для моего Huawei P30 ELE-L29 (версия EMUI 10.0.0 - Android версии 10) и возвращает BIOMETRIC_ERROR_NONE_ENROLLED, когда я вызываю BiometricManager # canAuthenticate (). Это единственное устройство с API версии 29, которое у меня есть, поскольку в эмуляторе Android Studio не реализовано распознавание лиц, а другие эмуляторы (Bluestacks, Nox и т. Д.) Не могут быть настроены для работы на Android 10 на моем MacBook.

Я был бы признателен за любой свет по этому вопросу, поскольку распознавание лиц является новым для родного Android, и я не мог найти там подобной проблемы. Я не уверен, проблема ли это в этом конкретном телефоне или у меня есть ошибка в моем коде.

Моя minSdkVersion - 23 (Android 6.0 Marshmallow), а моя targetSdkVersion - 29 (Android 10 Q).

Моя (частичная) реализация:

fun isBiometricsSupported(@NonNull context: Context): Boolean {
        val biometricManager = BiometricManager.from(context)
        var isBiometricsSupported = false

        when (biometricManager.canAuthenticate()) {
            BiometricManager.BIOMETRIC_SUCCESS -> {
                isBiometricsSupported = true
            }
            BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
                Log.println(Log.INFO, "a", "Logger: BIOMETRIC_ERROR_NO_HARDWARE")
            }
            BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
                Log.println(Log.INFO, "a", "Logger: BIOMETRIC_ERROR_NONE_ENROLLED")
                //It always goes here if I don't have any fingerprints enrolled,
                //ignoring all other biometric data I may have.
            }
            BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
                Log.println(Log.ERROR, "a", "Logger: BIOMETRIC_ERROR_HW_UNAVAILABLE")
            }
        }
        return isBiometricsSupported
    }

person Horkur    schedule 08.01.2020    source источник
comment
Возможно, вы передаете CryptoObject в BiometricPrompt при вызове аутентификации? Например, biometricPrompt.authenticate (promptInfo, cryptoObject). Если вы делаете это, также проверьте, устанавливаете ли вы setUserAuthenticationRequired () и setInvalidatedByBiometricEnrollment (true) при настройке CryptoObject (последнее истинно по умолчанию). Я обнаружил, что когда я это сделал, он принимает только отпечатки пальцев, а не распознавание лиц.   -  person Yusuf Isaacs    schedule 14.02.2020


Ответы (1)


Из-за вашей ошибки на устройстве нет зарегистрированных биометрических шаблонов. Вы должны сначала зарегистрировать свой биометрический шаблон в настройках, прежде чем вы сможете использовать биометрические данные в любом другом приложении. Обычно это можно сделать в разделе «Безопасность». Еще один способ проверить, зарегистрирован ли биометрический шаблон: если вы выключите телефон, сможете ли вы разблокировать его с помощью биометрических данных (отпечатка пальца или лица и т. Д.)?

person Isai Damier    schedule 13.01.2020
comment
Привет, Исай, извините за то, что я недостаточно ясен, но у меня включено распознавание лиц и зарегистрированные учетные данные (как вы говорите, я могу разблокировать телефон с помощью распознавания лиц), однако BiometricManager, похоже, их не видит. - person Horkur; 14.01.2020
comment
Это твое устройство? amazon.com/ELE-L29-Factory-Unlocked-Smartphone- International / dp / Я бегло просмотрел и обнаружил, что версия ОС 10 недоступна в США, где я живу. Я надеялся, что смогу помочь вам в устранении неполадок - person Isai Damier; 14.01.2020