Подтвердить что ты не робот

Отпечатки пальцев Android: hasEnrolledFingerprints вызывает исключение на некоторых Samsung

Я вижу много исключений в нашем производственном приложении, когда вы включаете отпечатки пальцев от пользователей Android 6, которые я не могу воспроизвести ни на одном из моих локальных устройств Samsung. Стек:

Message: SecurityException: Permission Denial: getCurrentUser() from pid=24365, uid=10229 requires android.permission.INTERACT_ACROSS_USERS
android.os.Parcel.readException in Parcel.java::1620
android.os.Parcel.readException in Parcel.java::1573
android.hardware.fingerprint.IFingerprintService$Stub$Proxy.hasEnrolledFingerprints in IFingerprintService.java::503
android.hardware.fingerprint.FingerprintManager.hasEnrolledFingerprints in FingerprintManager.java::762
android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23.a in SourceFile::39
android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl.a in SourceFile::239
android.support.v4.hardware.fingerprint.FingerprintManagerCompat.a in SourceFile::66

Это просто использует стандартный класс FingerprintManagerCompat из библиотеки поддержки, и проверка корректно работает на других устройствах.

Я не хочу добавлять это разрешение в свое приложение - похоже, это не имеет никакого отношения к отпечаткам пальцев.

Кто-нибудь сталкивался с чем-то вроде этого?

4b9b3361

Ответ 1

Я столкнулся с той же проблемой на Samsung Galaxy S6, работая под управлением Android 6.0.1

Проблема вызвана вызовом

fingerprintManager.hasEnrolledFingerprints()

Я исправил это, добавив вызов для проверки аппаратного обеспечения до:

fingerprintManager.isHardwareDetected()
    && mFingerprintManager.hasEnrolledFingerprints()

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