0

Ich habe schon eine ganze Weile daran gearbeitet und kann es nicht herausfinden, obwohl ich dachte, es wäre relativ einfach. Ich benutze den Fingerabdruckmanager von Android, um Benutzer über ihren Fingerabdruck zu authentifizieren, und es hat sehr gut funktioniert. Das Problem ist, dass ich die Authentifizierungsergebnisse nicht von meiner Hilfsklasse zurückbekomme und es ist sehr frustrierend. Ich bin ziemlich neu in der Verwendung von Hilfsklassen und nachdem ich es ausführlich gegooglet habe, kann ich die Authentifizierungsergebnisse immer noch nicht in meine Aktivität zurückbringen. Meine beste Hoffnung war es, Absichten mit onActivityResult zu verwenden, aber die Helferklasse sendet nie die Absicht aus (oder zumindest meine Hauptaktivität erhält sie nicht).Wie erhalten Sie Ergebnisse für die Authentifizierung per Fingerabdruck in früheren Aktivitäten?

Als Referenz ist meine Hauptklasse eine Aktivität, die eine Hilfsklasse verwendet (die .AuthenticationCallback erweitert), um ihre Fingerabdrücke zu überprüfen. Die Helfer-Klasse enthält die folgenden Methoden:

 public void startAuth(FingerprintManager manager, FingerprintManager.CryptoObject cryptoObject) { 

     cancellationSignal = new CancellationSignal(); 
     if (ActivityCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     manager.authenticate(cryptoObject, cancellationSignal, 0, this, null); 
    } 

    @Override 
    public void onAuthenticationError(int errMsgId, CharSequence errString) { 

    } 

    @Override 
    public void onAuthenticationFailed() { 

    } 

    @Override 
    public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { 
    } 

    @Override 
    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { 
     Toast.makeText(context, "You have Been Successfully authenticated!", Toast.LENGTH_SHORT).show(); 
    } 

Der Code aus der Tätigkeit einfach die Absicht aussendet und hat eine onActivityResult Methode:

 Intent btauthenticate = new Intent(getApplicationContext(), FingerPrintMainActivity.class); 
    startActivityForResult(authenticate, 1); 

Die Fingerabdrücke erfolgreich authentifiziert werden, und ich meinen Toast Nachricht erhalten, aber ich weiß einfach nicht, wie ich die Ergebnisse zurückbekomme. Ich denke, dass es einen einfachen Weg geben muss, um die Ergebnisse zurück zu bekommen, aber ich kann es einfach nicht herausfinden und es ist sehr frustrierend. Jede Hilfe wird sehr geschätzt.

+0

Verwenden Sie den Callback-Parameter. 'result.getAnyUsefulInfo()' –

+0

@MartinPfeffer Danke für die Antwort. Ich bin mir jedoch nicht sicher, wie ich es benutzen soll. Says getAnyUsefulInfo() ist nicht definiert. Ich habe versucht, nach diesem Callback-Parameter zu suchen, habe aber keine Dokumentation dazu gefunden. Hätten Sie zufällig einen Link, eine Referenz oder einen Beispielcode? – steven

+0

https://developer.android.com/reference/android/hardware/fingerprint/FingerprintManager.html#authenticate(android.hardware.fingerprint.FingerprintManager.CryptoObject, android.os.CancellationSignal, int, android.hardware.fingerprint.FingerprintManager .AuthenticationCallback, android.os.Handler) –

Antwort

0

Endlich eine Lösung gefunden, die für mich funktionierte. Ich habe nie wirklich herausgefunden, warum onActivityResult() nie funktioniert hat, obwohl es bei meinen anderen verschiedenen Aktivitäten funktioniert. Die beste Vermutung ist, dass onActivityResult zwischen zwei Aktivitäten arbeiten sollte (ich habe versucht mit einer Aktivität und einer Hilfsklasse). Ich denke, es gibt einen Weg, um es zum Laufen zu bringen, aber ich konnte es nicht herausfinden. Vielleicht hat es etwas damit zu tun, es nicht von der Aktivität selbst zu starten.

Meine Lösung bestand darin, einfach einen Handler zu verwenden, um die Daten zu verarbeiten, und dann ein Intent-Bündel zur ursprünglichen Aktivität zurückzusenden, um seine Verarbeitung durchzuführen.

Als Referenz für alle, die in Zukunft auf diesen Thread kommt:

Helper-Klasse im onAuthenticationSucceeded Methode enthält enthält:

 String message = "success" ; 
     Message msg = Message.obtain(); 
     msg.obj = message; 
     msg.setTarget(handler1); 
     msg.sendToTarget(); 

Helper Klasse dies am Anfang der Klasse enthält:

 Handler handler1 = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     String message = (String) msg.obj; 
     Log.i(TAG, "Value of message: " + message); 

     if (message == "success") { 

      Intent intent = new Intent(....this, ....class); 
      intent.putExtra("message", message); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent); 

     } 

    } 
    }; 

Die Aktivität, die es startet, erhält das Paket in seiner onCreate() und verarbeitet dann:

Ich bin sicher, das ist nicht die effizienteste Lösung, aber es funktioniert. Das Schöne an all dem ist, dass die Helferklasse in einen Dienst umgewandelt und von verschiedenen anderen Aktivitäten genutzt werden kann. Die Aktivitäten müssen nur in der Lage sein, das Bündel zu empfangen und grundlegende Logik zu verwenden, um weiter zu verarbeiten.

Verwandte Themen