解决方法:
import android.Manifest;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.hardware.biometrics.BiometricPrompt;
import android.os.Build;
import android.os.CancellationSignal;
import android.support.annotation.NonNull;
import android.support.annotation.RequiresApi;
import android.support.v4.app.ActivityCompat;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
private boolean isFingerprintAvailable() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.from(this);
return fingerprintManager.hasEnrolledFingerprints() && fingerprintManager.isHardwareDetected();
}
return false;
}
private void requestFingerprintPermission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.USE_FINGERPRINT}, REQUEST_FINGERPRINT_PERMISSION);
}
}
请确保在AndroidManifest.xml
文件中已添加指纹权限
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_FINGERPRINT_PERMISSION) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 权限被授予
showFingerprintDialog();
} else {
// 权限被拒绝
Toast.makeText(this, "无法使用指纹功能", Toast.LENGTH_SHORT).show();
}
}
}
private void showFingerprintDialog() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
showBiometricPrompt();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
showFingerprintManager();
}
}
FingerprintManagerCompat
进行指纹识别(适用于Android 6.0及以上版本)@RequiresApi(api = Build.VERSION_CODES.M)
private void showFingerprintManager() {
FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.from(this);
fingerprintManager.authenticate(null, 0, new CancellationSignal(), new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
super.onAuthenticationError(errMsgId, errString);
// 处理认证错误
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
super.onAuthenticationHelp(helpMsgId, helpString);
// 处理认证帮助信息
}
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
// 认证成功
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
// 认证失败
}
}, null);
}
BiometricPrompt
进行指纹识别(适用于Android 9.0及以上版本)@RequiresApi(api = Build.VERSION_CODES.P)
private void showBiometricPrompt() {
BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
.setTitle("指纹认证")
.setSubtitle("请验证指纹")
.setDescription("用于安全认证")
.setNegativeButton("取消", this.getMainExecutor(), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 取消认证
}
})
.build();
biometricPrompt.authenticate(new CancellationSignal(), this.getMainExecutor(), new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
// 处理认证错误
}
@Override
public void onAuthenticationSucceeded(Biometric