FingerprintManagerCompat 方法在三星设备上有问题
FingerprintManagerCompat method had issues with Samsung devices
问题
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)
- 银河 On5 (on5ltemtr)
- 银河 J7(2016) (j7eltetmo)
(数据来自崩溃报告)
研究中的当前解决方案
研究问题后,我找到的唯一解决方案是向清单添加以下权限:
<permission
android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
android:protectionLevel="signature"/>
这看起来很奇怪,我不确定这是否是最佳或正确的解决方案。
问题
为什么抛出这个异常?上述解决方案是否正确?
我真的很想了解更多这方面的信息。
谢谢!
我找到了三星的支持线程,其中提到这是设备的固件问题。
我只是在代码周围添加了一个 try/catch 以防止崩溃。
这应该在三星固件更新中解决。
我终于找到了重现此问题的方法。首先您需要在设备上注册指纹并将锁屏设置为none
。然后我不得不重新启动设备并打开我的应用程序调用 hasEnrolledFingerprints()
.
如@AnxGotta 所述,这似乎是由固件问题引起的。但是我找到了一个更干净的解决方案,然后添加了一个 try catch。我只需要在 hasEnrolledFingerprints()
.
之前调用 isHardwareDetected()
问题
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)
- 银河 On5 (on5ltemtr)
- 银河 J7(2016) (j7eltetmo)
(数据来自崩溃报告)
研究中的当前解决方案
研究问题后,我找到的唯一解决方案是向清单添加以下权限:
<permission
android:name="android.permission.INTERACT_ACROSS_USERS_FULL"
android:protectionLevel="signature"/>
这看起来很奇怪,我不确定这是否是最佳或正确的解决方案。
问题
为什么抛出这个异常?上述解决方案是否正确?
我真的很想了解更多这方面的信息。
谢谢!
我找到了三星的支持线程,其中提到这是设备的固件问题。
我只是在代码周围添加了一个 try/catch 以防止崩溃。
这应该在三星固件更新中解决。
我终于找到了重现此问题的方法。首先您需要在设备上注册指纹并将锁屏设置为none
。然后我不得不重新启动设备并打开我的应用程序调用 hasEnrolledFingerprints()
.
如@AnxGotta 所述,这似乎是由固件问题引起的。但是我找到了一个更干净的解决方案,然后添加了一个 try catch。我只需要在 hasEnrolledFingerprints()
.
isHardwareDetected()