【问题标题】:Android Fingerprints: hasEnrolledFingerprints triggers exception on some SamsungsAndroid 指纹:hasEnrolledFingerprints 在某些三星上触发异常
【发布时间】:2016-06-12 23:26:48
【问题描述】:

在启用来自 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 对于启用指纹但没有锁屏的场景,我已经检查了KeyguardManager.isKeyguardSecure()
  • 在我的 S7 中,该问题仅在 isKeyguardSecure() 返回 false 的情况下重现。即使在这种情况下,调用@David Medenjak 的答案中的 2 种方法也能解决问题。
  • @Petrakeas 我需要做一件额外的事情来重现这个问题。因此,首先您需要注册指纹并将屏幕锁定设置为滑动或无。然后我不得不重新启动设备。之后,我能够不断地重现这个问题。正如您提到的,David Medenjak 的回答解决了这个问题。
  • @Wirling 在我的华为设备上,如果我将屏幕锁定设置为滑动或无,那么它会删除所有注册的指纹。

标签: android android-fingerprint-api


【解决方案1】:

我在运行 Android 6.0.1 的三星 Galaxy S6 上遇到了同样的问题

问题是由调用引起的

fingerprintManager.hasEnrolledFingerprints()

我之前添加了一个检查硬件的调用来修复它:

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

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

【讨论】:

  • 我确实这样做了,但仍然有问题。我将此信息添加到我的问题中。感谢您的意见。
  • @kos 您在哪些设备上看到了问题?
  • 我也遇到同样的错误。我检查了我的代码,我刚刚在调用 hasEnrolledFingerprints() 之前添加了 hardwareControl。你有别的想法吗?
  • @atasoyh 不,对不起。这在当天为我解决了这个问题。我没有再做任何测试
  • 此代码适用于我,Samsung J1 Mini 6.0.1。在调用hasEnrolledFingerprints()之前,我先检查isHardwareDetected()
【解决方案2】:

如果在升级手机操作系统后出现这种情况,请转到开发人员选项-> 通过 USB 验证应用程序-> 将其关闭,辛苦学习了,希望对您有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 2016-05-14
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多