14

Sto cercando di implementare l'API di Google Fingerprint nella mia app (nel mio frammento in particolare). Google ha fornito un esempio ma è implementato all'interno di un'attività here.Perché `hasEnrolledFingerprints` dà errore che richiede un'autorizzazione solo nel mio frammento ma non nell'attività nell'esempio di Google?

La mia domanda specifica è che il codice sottostante per verificare se ci sono iscritti già le impronte digitali, che mi sta dando un errore (screenshot qui sotto):

Domanda -> Quale cambiamento devo fare per farlo funzionare nel mio frammento (al contrario di un'attività come quella di Google)?

if (!mFingerprintManager.hasEnrolledFingerprints()) { 
     purchaseButton.setEnabled(false); 
     // This happens when no fingerprints are registered. 
     Toast.makeText(getActivity(), 
       "Go to 'Settings -> Security -> Fingerprint' and register at least one fingerprint", 
       Toast.LENGTH_LONG).show(); 
     return; 
    } 

enter image description here

risposta

4

Android 6.0 deve 'chiedere' per il permesso in fase di esecuzione. https://developer.android.com/training/permissions/requesting.html

permessi pericolose possono dare l'accesso app per dati riservati dell'utente. Se la tua app elenca un'autorizzazione normale nel suo manifest , il sistema concede l'autorizzazione automaticamente. Se elimini un permesso pericoloso, l'utente deve dare esplicitamente l'approvazione alla tua app .

Anche se si dispone di <uses-permission android:name="android.permission.USE_FINGERPRINT"/> nel file manifest, la mia comprensione è che è necessario chiedere il permesso. Quindi sembra che l'errore sia dovuto al fatto che la tua app non ha un'autonomia di -run time- per utilizzare il gestore di impronte digitali.

(solo come il 90% sicuro di questo, dal momento che sto attaccando con 5.0, per ora, mi dispiace)


Aggiornamento: http://developer.android.com/reference/android/Manifest.permission.html#USE_FINGERPRINT

public static final String USE_FINGERPRINT ---- ------ Aggiunto in livello API 23

Consente a un'app di utilizzare l'hardware delle impronte digitali.

Grado di protezione: normale

Così sembra che non dovrebbe avere bisogno di questa autorizzazione in fase di esecuzione.

1) Avete il permesso nel vostro manifest?

2) È necessario inserire il seguente codice nel proprio per verificare se l'autorizzazione è stata revocata/non fornita per qualche motivo.

if (ContextCompat.checkSelfPermission(thisActivity, 
      Manifest.permission.USE_FINGERPRINT) // this might need massaged to 'android.permission.USE_FINGERPRINT' 
    != PackageManager.PERMISSION_GRANTED) { 
Log.d ("TEST", "You don't have permission"); 
} 

(o qualcosa di simile a questo) come l'esempio da https://developer.android.com/training/permissions/requesting.html