2016-07-26 52 views
0

basic Android教程應用程序將打印驗證指紋驗證的Toast消息。但它只能驗證一次。我希望它能夠在應用程序仍在運行時重新驗證指紋。我試圖添加一個while循環包裝helper.startAuth(),它不起作用。我提到了幾個問題(1,2,3),但沒有一個幫助我。這是我試過的,它不工作。如何在onCreate()中反覆驗證指紋()

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

感謝您的回覆。你怎麼看[服務](http://stackoverflow.com/a/6957909/3713720)。這是一個更好的選擇,我應該使用AsyncTask而不是服務的原因是什麼? – Cliff

+0

他們是完全不同的東西,不一定是/或者。服務意味着活動之間共享的長期處理。 AsyncTask意味着在另一個線程上進行相對快速的處理。服務可以啓動其他線程,但默認情況下是在UI線程上。 –