16

I'm seeing a lot of exceptions in our production app when enabling fingerprints coming from Android 6 users, which I cannot reproduce on any of my local Samsung devices. The stacktrace is:

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

This is just using the standard FingerprintManagerCompat class from the support library, and the check works correctly on other devices.

I don't want to add this permission to my app - it seems to have nothing to do with fingerprints.

Has anyone encountered anything like this?

kos
  • 1,627
  • 2
  • 18
  • 35
  • In order to reproduce this issue you need to have fingerprints registered but no screen lock: swipe or none. Otherwise, there is no problem. Either way, is there any solution for this case? – Petrakeas Dec 14 '16 at 15:10
  • @Petrakeas for the scenario of fingerprints enabled but no lock screen, I already have a check for `KeyguardManager.isKeyguardSecure()` – kos Jan 04 '17 at 20:36
  • In my S7 the problem was only reproduced in the case that `isKeyguardSecure()` returned false. Calling the 2 methods in @David Medenjak's answer solves the problem even in this case. – Petrakeas Jan 05 '17 at 12:20
  • 1
    @Petrakeas I needed to do one extra thing to reproduce this issue. So first you need to have fingerprints registered and screen lock set to swipe or none. Then I had to restart the device. After that I was able to reproduce this issue constantly. And as you mentioned the answer of David Medenjak solves this problem. – Wirling Jan 24 '17 at 08:45
  • @Wirling On my Huawei device, if I set my screen lock set to Swipe or None, then it deletes all the registered Fingerprints. – Shishir Shetty Aug 28 '18 at 15:38

1 Answers1

22

I came across the same problem on a Samsung Galaxy S6, running Android 6.0.1

The Problem was caused by calling

fingerprintManager.hasEnrolledFingerprints()

I fixed it by adding a call to check for hardware before:

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

Checking for fingerprints without the hardware available seems to cause this exception on some devices.

David Medenjak
  • 31,688
  • 14
  • 100
  • 129