2016-07-26 18 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线程上。 –