FingerprintManagerCompat方法与三星设备有问题

问题

java.lang.SecurityException: Permission Denial: getCurrentUser() from pid=#####, uid=##### requires android.permission.INTERACT_ACROSS_USERS at android.os.Parcel.readException(Parcel.java:1620) at android.os.Parcel.readException(Parcel.java:1573) at android.hardware.fingerprint.IFingerprintService$Stub$Proxy.hasEnrolledFingerprints(IFingerprintService.java:503) at android.hardware.fingerprint.FingerprintManager.hasEnrolledFingerprints(FingerprintManager.java:768) at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23.hasEnrolledFingerprints(FingerprintManagerCompatApi23.java:39) at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl.hasEnrolledFingerprints(FingerprintManagerCompat.java:239) at android.support.v4.hardware.fingerprint.FingerprintManagerCompat.hasEnrolledFingerprints(FingerprintManagerCompat.java:66) 

这个问题只发生在一些三星设备上:

  • Galaxy S6 Active(marinelteatt)
  • Galaxy On5(on5ltemtr)
  • Galaxy J7(2016)(j7eltetmo)

(来自崩溃报告的数据)


目前的研究解决scheme

在研究了这个问题之后,我发现唯一的解决scheme是向清单添加下列权限:

 <permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" android:protectionLevel="signature"/> 

这似乎很奇怪,我不确定这是否是最好的或适当的解决scheme。


为什么这个exception被抛出? 上述解决scheme是否正确?

我真的很喜欢这方面的更多信息。

谢谢!

Solutions Collecting From Web of "FingerprintManagerCompat方法与三星设备有问题"

我发现三星的支持线程提到这是一个设备的固件问题。

链接

我简单地在代码中添加了一个try / catch来防止崩溃。

这应该在Samsung固件更新中解决。

最后我find了一个重现这个问题的方法。 首先,您需要在设备上注册指纹,并将锁屏设置为none 。 然后,我不得不重新启动设备,并打开我的应用程序调用hasEnrolledFingerprints()

正如@AnxGotta所说,它似乎是由固件问题造成的。 不过,我发现一个更清洁的解决scheme,然后添加一个try catch 我只需要在isHardwareDetected()之前调用hasEnrolledFingerprints()