2016-07-26 8 views
0

このbasic Androidチュートリアルアプリでは、指紋認証を検証するToastメッセージを印刷します。しかし、それは一度しか認証できません。私はそれがアプリがまだ実行されているときはいつでも指紋を再認証できるようにしたい。 helper.startAuth()の周りにwhileループをラップして追加しようとしましたが、動作しません。私はいくつかの質問(123)を参照しましたが、それらのどれも私を助けていません。これは私が試したことであり、うまくいきません。onCreate()でFingerPrintを繰り返し認証する方法

if (cipherInit()) { 
    cryptoObject = new FingerprintManager.CryptoObject(cipher); 
    FingerprintHandler helper = new FingerprintHandler(this); 
    while(true){ 
     helper.startAuth(fingerprintManager, cryptoObject); 
    } 
} 

これは私のonCreate()です。すべてのご協力とご指導をいただき、ありがとうございます

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE); 
    keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); 

    if (!keyguardManager.isKeyguardSecure()){ 
     Toast.makeText(this, 
       "Lock screen security is not enable in Settings", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    if (ActivityCompat.checkSelfPermission(this, 
      Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED){ 
     Toast.makeText(this, 
       "Fingerprint authentication permission is not enabled", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    if (!fingerprintManager.hasEnrolledFingerprints()){ 
     Toast.makeText(this, "Register at least one fingerprint in Settings", Toast.LENGTH_LONG).show(); 
     return; 
    } 

    generateKey(); 
    if (cipherInit()) { 
     cryptoObject = new FingerprintManager.CryptoObject(cipher); 
     FingerprintHandler helper = new FingerprintHandler(this); 
     helper.startAuth(fingerprintManager, cryptoObject); 

    } 

} 

答えて

1

あなたが繰り返しのonCreateで何もすることができません。 OnCreateを終了して移動する必要があります。そうでなければ、アプリケーションはウォッチドッグによって殺されます。実際には、UIスレッドで何も繰り返し実行するべきではありません。あなたは別のスレッド(またはAsyncTask)や何らかの種類のタイマーでこれを行う必要があります。

+0

ご返信ありがとうございます。 [Services](http://stackoverflow.com/a/6957909/3713720)についてどう思いますか?それはより優れた選択肢であり、サービスではなくAsyncTaskを使用すべき理由は何ですか? – Cliff

+0

彼らはまったく別のものですが、必ずしも/またはどちらでもありません。サービスとは、アクティビティ間で共有される長期間の処理を意味します。 AsyncTaskは、別のスレッドで比較的高速に処理するためのものです。サービスは追加のスレッドを起動できますが、デフォルトではUIスレッド上にあります。 –

関連する問題