使用Android的指纹API和第三方库来实现指纹身份验证功能。
可以按照以下步骤进行操作:
dependencies {
implementation 'com.android.support:support-v4:28.0.0'
}
public class FingerprintManagerUtil {
public static boolean isFingerprintSupported(Context context) {
FingerprintManager fingerprintManager = getFingerprintManager(context);
return fingerprintManager != null && fingerprintManager.isHardwareDetected();
}
public static boolean isFingerprintEnabled(Context context) {
FingerprintManager fingerprintManager = getFingerprintManager(context);
KeyguardManager keyguardManager = getKeyguardManager(context);
return fingerprintManager != null && fingerprintManager.hasEnrolledFingerprints()
&& keyguardManager != null && keyguardManager.isKeyguardSecure();
}
public static void authenticate(FingerprintManager.AuthenticationCallback callback) {
FingerprintManager fingerprintManager = getFingerprintManager(context);
CancellationSignal cancellationSignal = new CancellationSignal();
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
fingerprintManager.authenticate(new FingerprintManager.CryptoObject(new FingerprintManagerUtil.CryptoHandler()), cancellationSignal, 0, callback, null);
}
}
private static FingerprintManager getFingerprintManager(Context context) {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
return context.getSystemService(FingerprintManager.class);
}
return null;
}
private static KeyguardManager getKeyguardManager(Context context) {
return (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
}
private static class CryptoHandler extends FingerprintManager.CryptoObject {
public CryptoHandler() {
super(getCipher());
}
private static Cipher getCipher() {
final String KEY_NAME = "key_name";
Cipher cipher;
try {
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
Key key = keyStore.getKey(KEY_NAME, null);
cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
cipher.init(Cipher.ENCRYPT_MODE, key);
} catch (KeyStoreException | Certificate