【问题标题】:Neither user nor current process has android.permission.USE_FINGERPRINT用户和当前进程都没有 android.permission.USE_FINGERPRINT
【发布时间】:2019-01-09 04:56:33
【问题描述】:

我有一个允许用户使用指纹验证登录的应用程序。该功能已经投入生产了几个月,但在最后一天,我开始看到许多这样的异常:

java.lang.SecurityException: Must have android.permission.USE_FINGERPRINT permission.: Neither user ##### nor current process has android.permission.USE_FINGERPRINT.

当我调用fingerprintManager.isHardwareDetected()检查设备是否支持指纹认证时发生崩溃。我在manifest中声明了USE_FINGERPRINT权限,所以不知道为什么系统会认为进程没有这个权限。这不应该是我必须在运行时检查的东西,因为USE_FINGERPRINT 是一个正常的权限。

这几个月来一直运行良好,当它昨天开始崩溃时,我们已经稳定发布了大约一个月。这个问题听起来几乎与FingerprintManager.isHardwareDetected() throwing java.lang.SecurityException? 相同。我只在 Oreo 设备上看到崩溃。

我目前的计划是抓住Security Exception 并继续进行,就好像设备没有硬件一样,但我担心这可能意味着如果这个问题仍然存在,没有人能够使用该功能进行登录。有没有其他人最近遇到过这个例外的问题?或者,如果没有,是否有人知道为什么会突然像这样开始发生这种情况?感谢您的帮助!

【问题讨论】:

    标签: android android-permissions android-8.0-oreo android-fingerprint-api android-8.1-oreo


    【解决方案1】:

    使用 FingerprintManagerCompat 代替,它为我正确处理权限。

    见: https://developer.android.com/reference/android/support/v4/hardware/fingerprint/FingerprintManagerCompat

    此外,您可能希望在 Android 清单中声明权限:

    <!-- Fingerprint -->
        <uses-permission-sdk-23 android:name="android.permission.USE_FINGERPRINT" />
    

    请注意,我使用了 uses-permission-sdk-23,因为我发现 FingerprintManager 在旧版本的 Android 中不可靠,我知道有一些带有指纹读取器的三星 Galaxy 设备,但在 API 23 之前你授予安装时的权限;这更多地取决于您的市场。尝试一下,看看它是否对您的用户有影响。

    见:https://developer.android.com/guide/topics/manifest/uses-permission-sdk-23-element

    【讨论】:

    • 谢谢!我会试试 FingerprintManagerCompat。我仍然希望我能理解为什么它在生产中放置了这么长时间后现在才成为一个问题。猜猜它可能只是一些android错误。我确实在清单中也列出了该权限(没有 sdk-23 部分),但是在决定是否允许指纹使用之前,我在代码中对 23 及更高版本进行了 sdk 检查(这意味着只有 M 及更高版本的设备是进入 isHardwareDetected 检查)。
    猜你喜欢
    • 2018-03-21
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多