14

Ich versuche, die Fingerabdruck-API von Google in meiner App (in meinem Fragment speziell) zu implementieren. Google hat ein Beispiel gegeben, aber es ist in einer Aktivität here implementiert.Warum gibt `hasEnrolledFingerprints` einen Fehler, der nur in meinem Fragment eine Berechtigung erfordert, aber nicht in der Aktivität in Google's Beispiel?

Meine konkrete Frage ist, dass der Code unten zu prüfen, ob Fingerabdrücke bereits eingeschrieben sind, ist es mir einen Fehler geben (siehe Abbildung unten):

Frage -> Welche Änderung muss ich tun mach es in meinem Fragment (im Gegensatz zu einer Aktivität wie Google) funktioniert?

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

Antwort

4

Android 6.0 muss 'fragen' für die Erlaubnis zur Laufzeit. https://developer.android.com/training/permissions/requesting.html

Gefährliche Berechtigungen können die App Zugriff auf die vertraulichen Daten des Benutzers geben. Wenn Ihre App in ihrem Manifest eine normale Berechtigung auflistet, erteilt das System die Berechtigung automatisch. Wenn Sie eine gefährliche Berechtigung auflisten, muss der Benutzer der App Ihre Genehmigung explizit erteilen.

Auch wenn Sie <uses-permission android:name="android.permission.USE_FINGERPRINT"/> in Ihrem Manifest haben, ist mein Verständnis, dass Sie um die Erlaubnis bitten müssen. Es sieht also so aus, als ob der Fehler darin besteht, dass Ihre App keine Zeit zum Ausführen des Fingerabdruck-Managers hat.

(nur wie 90% sicher, dass dieser, da ich mit 5,0 für jetzt, sorry bin kleben)


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

public static final String USE_FINGERPRINT ---- ------ Hinzugefügt in API-Ebene 23

Ermöglicht einer App, Fingerabdruck-Hardware zu verwenden.

Schutzstufe: normal

So scheint es, sollten Sie diese Berechtigung zur Laufzeit nicht benötigen.

1) Haben Sie die Erlaubnis in Ihrem Manifest?

2) Sie sollten den folgenden Code in Ihren eingeben, um zu überprüfen, ob die Berechtigung aus irgendeinem Grund widerrufen/nicht erteilt wird.

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"); 
} 

(oder etwas in der Nähe dieser) wie das Beispiel von https://developer.android.com/training/permissions/requesting.html