我正在關注this tutorial.Right現在,我試圖循環指紋驗證部分,以便我可以保持重新驗證用戶指紋。我試圖使用onStart()和onCreate()中的線程來循環身份驗證,但是應用程序在兩種情況下都卡住了。方法無法在onStart()和onCreate()線程中循環
原始代碼只有一次
@Override
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);
}
}
線程中調用onStart()/的onCreate()失敗
@Override
protected void onStart() {
super.onStart();
new Thread(new Runnable(){
public void run() {
while(true)
{
try {
Thread.sleep(50);
if (cipherInit()) {
cryptoObject = new FingerprintManager.CryptoObject(cipher);
FingerprintHandler helper = new FingerprintHandler(MainActivity.this);
helper.startAuth(fingerprintManager, cryptoObject);
}} catch (InterruptedException e){
e.printStackTrace();
}
}
}
}).start();}
除了使用線程,我也試過,可以驗證使用AsyncTask爲我做while循環。這是我創建班級的嘗試。我的問題是cipherInit()駐留在MainActivity.java中,我如何從我的Looping類調用該方法?
Looping.java
import android.hardware.fingerprint.FingerprintManager;
import android.os.AsyncTask;
public class Looping extends AsyncTask<Object,Void,Void> {
FingerprintManager fingerprintManager;
FingerprintManager.CryptoObject cryptoObject;
Cipher cipher;
@Override
protected Void doInBackground(Void... arg0) {
cipher = (Cipher) arg0[0];
while(true) {
if (cipherInit()) {
cryptoObject = new FingerprintManager.CryptoObject(cipher);
FingerprintHandler helper = new FingerprintHandler(MainActivity.this);
helper.startAuth(fingerprintManager, cryptoObject);
}
}
}}
MainActivity
Looping loop = new Looping();
loop.execute(cipher, null, null);
這是我的第一個個人項目,我仍然有完整的Android結構相對較新。我真的很感謝你們所有的意見。在此先感謝
你是說我應該不得不在「FingerprintHandler」的'onAuthenticationSucceeded()'和'onAuthenticationFailed()'中繼續「繼續」,「循環」或「重新繼續」我的身份驗證?我該如何繼續並重振整個事情或處理回調?我不太熟悉這種異步回調。 – Cliff
您可以根據所調用的回調方法確定要採取的操作。但它是一個異步操作,你不應該只是循環等待某件事情。 –