USE_FINGERPRINT устарел на уровне API 28.

Константа USE_FINGERPRINT была устарела на уровне API 28, и мы должны использовать более общий USE_BIOMETRIC который был добавлен на том же уровне API.

Я меняю эти константы в своем манифесте и получаю сообщение об ошибке при вызове FingerprintManagerCompat.from(context).isHardwareDetected().

Ошибка:

Отсутствует необходимое разрешение – USE_FINGERPRINT

Это происходит из-за того, что аннотация @RequiresPermission("android.permission.USE_FINGERPRINT") в FingerprintManagerCompat в 28.0.0-rc3 поддерживает v4 lib.

Могу ли я игнорировать это и продолжать использовать новое разрешение?


person JerabekJakub    schedule 17.07.2018    source источник
comment
вы добавили <uses-permission android:name="android.permission.USE_FINGERPRINT"/> разрешение в файл манифеста   -  person AskNilesh    schedule 17.07.2018
comment
@NileshRathod Нет, как я уже писал, я изменил его на новый USE_BIOMETRIC.   -  person JerabekJakub    schedule 17.07.2018
comment
Я думаю, вам нужно использовать BiometricPrompt вместо FingerprintManagerCompat   -  person manuelwaldner    schedule 05.10.2018
comment
Вы находите решение для этого? Это изменение приводит к сбою, по крайней мере, должно было быть предостережение.   -  person Amit    schedule 16.10.2018
comment
@Amit Привет, Амит, у меня еще недостаточно времени, чтобы попробовать новый BiometricPrompt, как предлагает Мануэль. Я отправлю отзыв после попытки.   -  person JerabekJakub    schedule 16.10.2018
comment
У меня такая же проблема   -  person Alireza Noorali    schedule 11.12.2018
comment
Связанная проблема с трекером Google: issuetracker.google.com/issues/109826221 К сожалению, они не собираются починить это :(   -  person algrid    schedule 25.12.2018
comment
Вы должны просто использовать BiometricManager.from(context).canAuthenticate() == BiometricManager.BIOMETRIC_SUCCESS Вам не нужно FingerprintManagerCompat.from(context).isHardwareDetected() Он вернет BIOMETRIC_ERROR_NO_HARDWARE, если аппаратное обеспечение недоступно, и BIOMETRIC_ERROR_NONE_ENROLLED, если отпечаток пальца не зарегистрирован (или лицо, радужная оболочка, ...)   -  person RiRomain    schedule 16.07.2020


Ответы (3)


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

Как указано в блоге разработчиков Google. , так как API 28 Google предлагает новый API биометрии, который упрощает весь процесс биометрической аутентификации. . Они предоставляют простой конструктор для диалога авторизации. Кроме того, они также поддерживают обнаружение лица и радужной оболочки — имхо, это всего лишь вопрос времени, если вы захотите его поддерживать, и, возможно, стоит обновить его.

Единственный недостаток, который я обнаружил до сих пор, заключается в том, что если вы хотите проверить, например, оборудование для отпечатков пальцев доступно, вам нужно будет запустить процесс аутентификации, чтобы проверить это, и дождаться обратный вызов ошибки. Устаревший API отпечатков вместо этого предоставляет такие методы, как isHardwareDetected() или hasEnrolledFingerprints() для этой цели. В этом случае вам, вероятно, придется перепроектировать свое приложение, если вы полагаетесь на эту информацию. Причина устаревания этих методов, вероятно, заключается в том, что они поддерживают только отпечатки пальцев, поэтому было бы неплохо обновить их.

Google также предоставил версию compat 'androidx.biometric:biometric:1.0.0-alpha02' для устройств ниже API 28. Кажется, что, импортировав эту зависимость, вы можете просто переключиться на разрешение USE_BIOMETRIC, не изменяя ничего другого в своем приложении — вы не будете беспокоит предупреждение больше. Так как это только в альфа-стадии, я бы использовать его с осторожностью. Поэтому, пока вы не используете ничего из биометрического API, вы также можете просто игнорировать проблему и столкнуться с ней снова, когда захотите поддерживать дополнительные методы биометрической аутентификации.

EDIT: теперь выпущена бета-версия библиотеки совместимости, 'androidx.biometric:biometric:1.0.0-beta01'. Дополнительную информацию об этом можно найти здесь.

Теперь стабильная версия библиотеки совместимости выпущена 18 декабря 2019 г., «androidx.biometric:biometric:1.0.1». Для получения дополнительной информации об этом нажмите здесь.

person mathew11    schedule 22.10.2018
comment
Это тот качественный ответ, который нам нужен больше при переполнении стека. +100 ‹3. Жаль, что @JerabekJakub еще не выбрал ваш ответ в качестве официального, чтобы дать вам заслуженные баллы. - person jungledev; 18.12.2018
comment
@jungledev В мою защиту SO не отправил мне уведомление в почтовый ящик ни на ответ Mathew11, ни на ваш комментарий. Я получил уведомление только после нового ответа от 16/8, тогда я увидел этот ответ и ваш комментарий. :-/ - person JerabekJakub; 20.08.2019
comment
Доступна версия 1.0.0-beta02, ожидание окончательной версии. - person Sergio; 19.09.2019
comment
29 – canAuthenticate developer.android.com/reference/android. /оборудование/биометрия/ - person Florian Walther; 08.12.2019

API биометрии предоставляет BiometricConstants для обработки ошибок.

override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
    super.onAuthenticationError(errorCode, errString)

    //The device does not have a biometric sensor.
    if (errorCode == BiometricPrompt.ERROR_HW_NOT_PRESENT){
      //Do something
    }
}
person chock2099    schedule 16.08.2019

Вы можете использовать этот.

 <uses-feature android:name="android.hardware.fingerprint" android:required="true" />
person Jewel Rana    schedule 27.11.2020