gpt4 book ai didi

android - 在应用程序身份验证中使用时取消了指纹操作

转载 作者:太空狗 更新时间:2023-10-29 15:50:30 25 4
gpt4 key购买 nike

我在我的应用程序中使用 FingerprintManager 在屏幕解锁后每次返回应用程序时对用户进行身份验证。第一次正常,下次显示指纹操作取消。

这是我的代码:

public class FingerprintHandler extends FingerprintManager.AuthenticationCallback
{
private AlertDialog.Builder dialogBuilder;
private AlertDialog b;

private TextView text_state;
private ImageView image_state;
View view;
private Context context;

public FingerprintHandler(Context mContext, View mView) {
context = mContext;
this.view = mView;
dialogBuilder = new AlertDialog.Builder(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final View dialogView = inflater.inflate(R.layout.custom_fingerprint_auth_dialog, null);
text_state = (TextView) dialogView.findViewById(R.id.text_state);
image_state = (ImageView) dialogView.findViewById(R.id.image_state);
// view = inflater.inflate(R.layout.activity_passcode, null);
dialogBuilder.setView(dialogView);
dialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
}
});
dialogBuilder.setPositiveButton("Use Password", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {

PasscodeActivity.enterPassword(view, context);
}
});
b = dialogBuilder.create();
b.show();
b.setCancelable(false);
b.setCanceledOnTouchOutside(false);
}

//Implement the startAuth method, which is responsible for starting the fingerprint authentication process//

public void startAuth(FingerprintManager manager, FingerprintManager.CryptoObject cryptoObject) {

CancellationSignal cancellationSignal = new CancellationSignal();
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
return;
}
manager.authenticate(cryptoObject, cancellationSignal, 0, this, null);
}

@Override
//onAuthenticationError is called when a fatal error has occurred. It provides the error code and error message as its parameters//

public void onAuthenticationError(int errMsgId, CharSequence errString) {

//I’m going to display the results of fingerprint authentication as a series of toasts.
//Here, I’m creating the message that’ll be displayed if an error occurs//

if (errMsgId != FINGERPRINT_ERROR_CANCELED) {
text_state.setText(errString);
Log.e("ERROR", "" + errString);
image_state.setImageResource(R.drawable.ic_fingerprint_failure);
text_state.setTextColor(context.getResources().getColor(R.color.notVerified));
//Toast.makeText(context, "Authentication error\n" + errString, Toast.LENGTH_LONG).show();
}
}

@Override

//onAuthenticationFailed is called when the fingerprint doesn’t match with any of the fingerprints registered on the device//

public void onAuthenticationFailed() {
text_state.setText(context.getString(R.string.fingerFailure));
image_state.setImageResource(R.drawable.ic_fingerprint_failure);
text_state.setTextColor(context.getResources().getColor(R.color.notVerified));
//Toast.makeText(context, "Authentication failed", Toast.LENGTH_LONG).show();
}

@Override

//onAuthenticationHelp is called when a non-fatal error has occurred. This method provides additional information about the error,
//so to provide the user with as much feedback as possible I’m incorporating this information into my toast//
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
text_state.setText(helpString);
Log.e("HELP",""+helpString);
image_state.setImageResource(R.drawable.ic_fingerprint_failure);
text_state.setTextColor(context.getResources().getColor(R.color.notVerified));
//Toast.makeText(context, "Authentication help\n" + helpString, Toast.LENGTH_LONG).show();
}

@Override

//onAuthenticationSucceeded is called when a fingerprint has been successfully matched to one of the fingerprints stored on the user’s device//
public void onAuthenticationSucceeded(
FingerprintManager.AuthenticationResult result) {

text_state.setText(context.getString(R.string.fingerSuccess));
image_state.setImageResource(R.drawable.ic_fingerprint_success);
text_state.setTextColor(context.getResources().getColor(R.color.colorPrimaryDark));
Activity activity = (Activity) context;
activity.finish();
b.dismiss();

//Toast.makeText(context, "Success!", Toast.LENGTH_LONG).show();
}
}

最佳答案

取消指纹操作通常在传感器被之前的操作占用时触发。每次离开应用程序或完成身份验证时调用 cancellationSignal.cancel(); 这将确保传感器已完成工作并可以将其释放。在您的情况下,我会在您的 LockScreens onPause 和 Important: 中添加该行,并在您的每个 FingerPrintHandler 回调中添加该行,以确保例如

    @Override
//onAuthenticationFailed is called when the fingerprint doesn’t match with any of the fingerprints registered on the device//
public void onAuthenticationFailed() {
text_state.setText(context.getString(R.string.fingerFailure));
image_state.setImageResource(R.drawable.ic_fingerprint_failure);
cancellationSignal.cancel();
text_state.setTextColor(context.getResources().getColor(R.color.notVerified));
//Toast.makeText(context, "Authentication failed", Toast.LENGTH_LONG).show();
}

关于android - 在应用程序身份验证中使用时取消了指纹操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45136354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com