2016-06-12 10 views
13

Visualizzo molte eccezioni nella nostra app di produzione quando si abilitano le impronte digitali provenienti da utenti Android 6, che non riesco a riprodurre su nessuno dei dispositivi Samsung locali. Lo stacktrace è:Impronte digitali Android: hasEnrolledFingerprints fa scattare l'eccezione su alcuni Samsung

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 

Questo è solo utilizzando la classe standard FingerprintManagerCompat dalla libreria di supporto, e il controllo funziona correttamente su altri dispositivi.

Non voglio aggiungere questa autorizzazione alla mia app, sembra non avere nulla a che fare con le impronte digitali.

Qualcuno ha riscontrato qualcosa di simile?

+0

Per riprodurre questo problema è necessario avere le impronte digitali registrate ma nessun blocco schermo: scorri o nessuno. Altrimenti, non ci sono problemi. Ad ogni modo, c'è qualche soluzione per questo caso? – Petrakeas

+0

@Petrakeas per lo scenario delle impronte digitali abilitato ma nessuna schermata di blocco, ho già un controllo per 'KeyguardManager.isKeyguardSecure()' – kos

+0

Nella mia S7 il problema è stato riprodotto solo nel caso in cui 'isKeyguardSecure()' restituisse false. Chiamare i 2 metodi nella risposta di @David Medenjak risolve il problema anche in questo caso. – Petrakeas

risposta

11

mi sono imbattuto lo stesso problema su un Samsung Galaxy S6, sistema operativo Android 6.0.1

Il problema è stato causato da chiamando

fingerprintManager.hasEnrolledFingerprints() 

ho riparato con l'aggiunta di una chiamata per verificare la presenza di hardware prima :

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

Il controllo delle impronte digitali senza l'hardware disponibile sembra causare questa eccezione su alcuni dispositivi.

+2

Lo faccio esattamente e ho ancora il problema. Ho aggiunto questa informazione alla mia domanda. Grazie per l'input. – AnxGotta

+1

Ho già il controllo in atto e vedo ancora il problema. – kos

+0

@kos Su quali dispositivi vedi il problema? – Petrakeas