Android Fingerprints: hasEnrolledFingerprints вызывает исключение на некоторых Samsungs

Я вижу много исключений в нашем рабочем приложении при включении отпечатков пальцев, поступающих от пользователей 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 из библиотеки поддержки, а на других устройствах проверка работает корректно.

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

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


person kos    schedule 12.06.2016    source источник
comment
Чтобы воспроизвести эту проблему, у вас должны быть зарегистрированы отпечатки пальцев, но не блокировка экрана: проведите или нет. В противном случае проблем нет. В любом случае, есть ли решение для этого случая?   -  person Petrakeas    schedule 14.12.2016
comment
@Petrakeas для сценария с включенными отпечатками пальцев, но без экрана блокировки, у меня уже есть чек на KeyguardManager.isKeyguardSecure()   -  person kos    schedule 04.01.2017
comment
В моем S7 проблема воспроизводилась только в том случае, если isKeyguardSecure() возвращал false. Вызов двух методов в ответе @David Medenjak решает проблему даже в этом случае.   -  person Petrakeas    schedule 05.01.2017
comment
@Petrakeas Мне нужно было сделать еще одну вещь, чтобы воспроизвести эту проблему. Итак, сначала вам нужно зарегистрировать отпечатки пальцев и установить блокировку экрана на пролистывание или нет. Затем мне пришлось перезагрузить устройство. После этого я смог воспроизвести эту проблему постоянно. И, как вы упомянули, ответ Дэвида Меденжака решает эту проблему.   -  person Wirling    schedule 24.01.2017
comment
@Wirling На моем устройстве Huawei, если я установлю блокировку экрана на Swipe или None, тогда будут удалены все зарегистрированные отпечатки пальцев.   -  person Shishir Shetty    schedule 28.08.2018


Ответы (1)


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

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

fingerprintManager.hasEnrolledFingerprints()

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

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

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

person David Medenjak    schedule 04.07.2016
comment
Я делаю это точно и все еще имею проблему. Я добавил эту информацию в свой вопрос. Спасибо за отзыв. - person AnxGotta; 07.09.2016
comment
@kos На каких устройствах вы видите проблему? - person Petrakeas; 24.01.2017
comment
Я также получаю ту же ошибку. И я проверил свой код, я только что добавил hardwareControl перед вызовом hasEnrolledFingerprints(). У вас есть другая идея? - person atasoyh; 10.02.2017
comment
@atasoyh Нет, извини. Это решило проблему для меня еще в тот день. Я больше не делал никаких тестов - person David Medenjak; 10.02.2017
comment
У меня этот код работает, Samsung J1 Mini 6.0.1. Я сначала проверил, если isHardwareDetected(), прежде чем звонить hasEnrolledFingerprints() - person Tenten Ponce; 01.02.2018
comment
Работает на меня. Столкнулся с этой проблемой на Samsung J5 и Samsung A3. - person Roko Spark; 02.07.2020