安卓指纹:hasEnrolledFingerprints在某些三星手机上会触发异常

17

当启用来自Android 6用户的指纹时,我们的生产应用程序中出现了很多异常,但我无法在任何本地三星设备上复现。堆栈跟踪如下:

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类,并且该检查在其他设备上可以正常工作。

我不想将此权限添加到我的应用程序中-它似乎与指纹无关。

有人遇到过类似的情况吗?


为了重现此问题,您需要注册指纹但没有屏幕锁定:滑动或无锁。否则,就没有问题。无论如何,有没有解决这个问题的办法? - Petrakeas
@Petrakeas 对于启用指纹但未设置锁屏的情况,我已经有了一个检查 KeyguardManager.isKeyguardSecure() 的方法。 - kos
在我的S7中,只有当isKeyguardSecure()返回false时才会出现问题。调用@David Medenjak答案中的2个方法即可解决此问题,即使在这种情况下也是如此。 - Petrakeas
1
@Petrakeas 我需要做一件额外的事情来重现这个问题。首先,您需要注册指纹并将屏幕锁定设置为滑动或无锁定状态。然后我不得不重新启动设备。之后,我能够不断地重现这个问题。正如你提到的David Medenjak的答案解决了这个问题。 - Wirling
@Wirling 在我的华为设备上,如果我将屏幕锁设置为滑动或无锁定,则会删除所有已注册的指纹。 - Shishir Shetty
2个回答

23

我在Samsung Galaxy S6上遇到了同样的问题,运行的是Android 6.0.1。

这个问题是由调用下列代码引起的:

fingerprintManager.hasEnrolledFingerprints()

我通过添加检查硬件的调用来解决了这个问题:

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

在某些设备上,在没有可用硬件的情况下检查指纹似乎会导致此异常。


2
我确实按照这样做了,但问题仍然存在。我已经将这些信息添加到我的问题中。感谢您的意见。 - AnxGotta
@kos 你在哪些设备上看到这个问题? - Petrakeas
我也遇到了同样的错误。我检查了我的代码,发现在调用hasEnrolledFingerprints()之前,我只是添加了hardwareControl。你有其他想法吗? - atasoyh
@atasoyh 不好意思,这个方法曾经解决了我的问题。我没有进行过更多的测试。 - David Medenjak
1
这段代码在我的三星J1 Mini 6.0.1上运行正常。在调用hasEnrolledFingerprints()之前,我先检查了isHardwareDetected() - Tenten Ponce
這對我有用。在三星J5和三星A3上發現了這個問題。 - Roko Spark

0

如果这是在您升级手机操作系统后发生的,请前往开发者选项 -> 通过 USB 验证应用程序 -> 将其关闭,我也是吃了亏才学会的,希望能节省一些宝贵的时间!enter image description here


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