指纹识别管理器在Android Oreo上崩溃,而在其他版本上不会。

4

当手动请求Oreo指纹识别权限时,弹出框没有显示。

我在清单文件中列出了USE_FINGERPRINT权限,但仍然出现异常:

    W/System.err: java.lang.SecurityException: Must have android.permission.USE_FINGERPRINT permission.: Neither user 10190 nor current process has android.permission.USE_FINGERPRINT.
        at android.os.Parcel.readException(Parcel.java:2004)
        at android.os.Parcel.readException(Parcel.java:1950)
        at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.isHardwareDetected(IFingerprintService.java:465)
        at android.hardware.fingerprint.FingerprintManager.isHardwareDetected(FingerprintManager.java:835)
        at ""ui.biometricAuth.BiometricAuth.getFingerPrintAuthError(BiometricAuth.java:174)
        at ""ui.biometricAuth.BiometricAuth.isTouchIDEnabled(BiometricAuth.java:225)
        at ""ui.usermanagement.LoginActivity.onCreate(LoginActivity.java:403)
        at android.app.Activity.performCreate(Activity.java:7036)
        at android.app.Activity.performCreate(Activity.java:7027)
 W/System.err:     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1231)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2864)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2989)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1688)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6753)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:482)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

检查您是否正确声明了权限。 - Pankaj Kumar
@Pankaj Kumar 是的,我已经按照正确的方式完成了它,在其他版本上可以运行,但在Oreo上会崩溃。 - jyoti sakhare
你正在测试哪些设备出现了问题?我在使用 Android 8.x 设备上使用 USE_FINGERPRINT 没有任何问题。例如,查看此项目 。我碰巧在指纹 API 的反应层上使用 RxFingerprint 库,但这在这里并不重要。 - CommonsWare
@CommonsWare 在搜索此问题时,我发现 https://issuetracker.google.com/issues/37120754 仍处于指定状态。因此似乎有许多人面临类似的问题。 - Pankaj Kumar
我正在使用装有Oreo操作系统的OnePlus 5手机。 - jyoti sakhare
我曾在Galaxy S7上看到过类似的问题,其中hasEnrolledFingerprints()有时会在重新启动手机后第一次调用时引发SecurityException。如果在hasEnrolledFingerprints之前调用isHardwareDetected,该问题似乎会消失,但为了安全起见,我将整个过程包装在try {} catch(SecurityException){}中。 - Michael
3个回答

0

我之前添加了以下权限

<uses-permission
    android:name="android.permission.USE_FINGERPRINT"
    android:requiredFeature="false" />

现在,只需删除android:requiredFeature="false"并添加以下内容

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

对于所有操作系统版本都运作良好。


1
我已经拥有了这个权限,没有使用 requiredFeature,但是它仍然在我的设备上崩溃。然而,当我检索 FINGERPRINT_SERVICE 时,我只会得到一个空指针,而不是像主题发起者那样的权限错误。 - Peterdk
你能修好这个问题吗?@Peterdk - Rohit Singh

0
一个干净的构建(或者只是重新构建)也可以。

-3

添加 android.permission.USE_BIOMETRIC 权限


2
这个应用在Android 8.x上崩溃了;USE_BIOMETRIC直到P开发者预览版才被添加。 - CommonsWare

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接