0

나는 꽤 오랫동안이 작업을 해왔으며, 비교적 쉽다는 생각에도 불구하고 그것을 이해할 수는 없다. 나는 지문을 통해 사용자를 인증하기 위해 안드로이드의 FingerprintManager를 사용하고 있으며 매우 효과적이다. 문제는 필자의 도우미 클래스에서 인증 결과를 다시 얻을 수 없으며 매우 실망 스럽습니다. 나는 도우미 클래스를 사용하는 것에 익숙하지 않고 광범위하게 인터넷 검색을 한 후에도 인증 결과를 다시 내 활동으로 가져올 수 없다. 내 최선의 희망은 onActivityResult를 사용하여 의도를 사용하는 것이었지만 도우미 클래스는 의도를 보내지 않습니다 (또는 적어도 내 주요 활동은 그것을받지 못합니다).이전 활동에서 지문 인증 결과를 얻는 방법?

참고로 본인의 주 클래스는 .AuthenticationCallback을 확장 한 헬퍼 클래스를 사용하여 지문을 확인하는 활동입니다. 도우미 클래스는 다음과 같은 방법을 포함

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

활동에서의 코드는 단순히 의도를 전송하고 onActivityResult를 방법이 있습니다

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

지문이 성공적으로 인증을하고 내 토스트 메시지가, 그러나 나는 결과를 다시 얻는 방법을 모른다. 나는 결과를 되돌릴 수있는 쉬운 방법이 있어야한다고 생각하지만, 나는 그것을 알아낼 수 없을뿐 아니라 매우 실망 스럽다. 어떤 도움이라도 대단히 감사합니다.

+0

콜백 매개 변수를 사용하십시오. 'result.getAnyUsefulInfo()' –

+0

@MartinPfeffer 응답 해 주셔서 감사합니다. 그러나 나는 그것을 사용하는 방법에 대해 확신하지 못한다. getAnyUsefulInfo()가 정의되지 않았다고합니다. 이 콜백 매개 변수를 검색하려고했지만 문서를 찾지 못했습니다. 링크, 참조 또는 예제 코드가 있습니까? – 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.처리기) –

답변

0

마침내 나를 위해 일한 해결책을 찾았습니다. 나는 onActivityResult()가 왜 작동하지 않았는지를 결코 알지 못했다. 다른 다양한 활동에서 작동한다. 가장 좋은 추측은 onActivityResult가 두 개의 액티비티 (하나의 액티비티와 헬퍼 클래스로 시도) 사이에서 작동하도록 의도되었다는 것입니다. 나는 그것을 작동시키는 방법이 있다고 생각하지만, 그것을 이해할 수는 없었다. 어쩌면 활동 자체에서 시작하지 않는 것과 관련이있을 수 있습니다.

내 솔루션은 단순히 처리기를 사용하여 데이터를 처리 한 다음 원래 작업으로 인 텐트 번들을 다시 보내 프로세싱을 수행하는 것이 었습니다. 앞으로이 스레드에 걸쳐 오는 사람에게 참고로

:

도우미 클래스는 onAuthenticationSucceeded 방법에 포함이 포함

:

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

도우미 클래스는 클래스의 시작 부분이 포함되어 있습니다

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

     } 

    } 
    }; 

실행되는 액티비티는 onCreate()에서 번들을 가져온 다음 처리합니다 :

Bundle bundle = getIntent().getExtras(); 
    String message = bundle.getString("message"); 
    if(message...) { 
    ....Do Something 
    } 

나는 이것이 가장 효율적인 해결책은 아니지만 효과가있을 것이라고 확신합니다. 이 모든 측면에서 좋은 부분은 도우미 클래스가 서비스로 전환 될 수 있고 다양한 다른 활동에서 사용될 수 있다는 것입니다. 활동은 번들을 받고 기본 논리를 사용하여 추가 처리 할 수 ​​있어야합니다.