0
点赞
收藏
分享

微信扫一扫

android调用系统指纹

飞进科技 2024-10-10 阅读 24

简单版的指纹,唤起系统指纹认证

FingerprintTool fingerprintTool = new FingerprintTool();
    if (fingerprintTool.supportFingerprint(cordova.getActivity(), false, false)) {
        if (fingerprintTool.isSupportFingerprint(cordova.getActivity())) {
            fingerprintTool.startListening(cordova.getActivity());
            fingerprintTool.setOnFingerprintSetting(new FingerprintTool.OnFingerprintSetting() {
                @Override
                public void onFingerprint(Boolean isSucceed) {
                    if (isSucceed) {
                        //认证成功
                    } else {
     //认证失败
                    }
                }

                @Override
                public void onFingerprintDisable(String errString) {
                    //认证失败
                }
            });
        }
    } else {
        //认证失败
    }


private KeyStore keyStore;
private Cipher cipher;
private String DEFAULT_KEY_NAME = "default_key";

/**
 * 判断是否支持指纹识别
 */
public boolean supportFingerprint(Activity mContext,Boolean showMsg,Boolean go2DefaultLoginType){
    if (Build.VERSION.SDK_INT < 23) {
        if (showMsg){
            Toast.makeText(mContext,"您的系统版本过低,不支持指纹功能",Toast.LENGTH_SHORT).show();
        }
        return false;
    }else {
        KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class);
        FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.from(mContext);
        if (!fingerprintManager.isHardwareDetected()) {
            if (showMsg) {
                Toast.makeText(mContext,"您的手机不支持指纹功能",Toast.LENGTH_SHORT).show();
            }
            return false;
        } else if (!keyguardManager.isKeyguardSecure()) {
            if (showMsg) {
                if (go2DefaultLoginType){
                    Toast.makeText(mContext,"您至少需要在系统设置中添加一个指纹",Toast.LENGTH_SHORT).show();
                } else {
                    Toast.makeText(mContext,"您至少需要在系统设置中添加一个指纹",Toast.LENGTH_SHORT).show();
                }
            }
            return false;
        } else if (!fingerprintManager.hasEnrolledFingerprints()) {
            // 弹出提示框,跳转指纹添加页面
            if (showMsg) {
                if (go2DefaultLoginType){

                }else {
                    Toast.makeText(mContext,"您至少需要在系统设置中添加一个指纹",Toast.LENGTH_SHORT).show();
                }
            }
            return false;
        }
    }
    return true;
}
/**
 * 判断设备是否支持指纹识别
 */
public boolean isSupportFingerprint(Context mContext) {
    if (Build.VERSION.SDK_INT < 23) {
        return false;
    } else {
        KeyguardManager keyguardManager = mContext.getSystemService(KeyguardManager.class);
        FingerprintManagerCompat fingerprintManager = FingerprintManagerCompat.from(mContext);
        if (!fingerprintManager.isHardwareDetected()) {
            return false;
        } else if (!keyguardManager.isKeyguardSecure()) {
            return false;
        }
    }
    return true;
}

@TargetApi(23)
public void initKey() {
    try {
        keyStore = KeyStore.getInstance("AndroidKeyStore");
        keyStore.load(null);
        KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
        KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder(
                DEFAULT_KEY_NAME,
                KeyProperties.PURPOSE_ENCRYPT
        ).setBlockModes(KeyProperties.BLOCK_MODE_CBC)
                .setUserAuthenticationRequired(true)
                .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7);
        keyGenerator.init(builder.build());
        keyGenerator.generateKey();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

@TargetApi(23)
public Cipher initCipher(){
    try {
        Key key = keyStore.getKey(DEFAULT_KEY_NAME, null);
        cipher = Cipher.getInstance(
                KeyProperties.KEY_ALGORITHM_AES + "/"
                        + KeyProperties.BLOCK_MODE_CBC + "/"
                        + KeyProperties.ENCRYPTION_PADDING_PKCS7
        );
        cipher.init(Cipher.ENCRYPT_MODE, key);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return cipher;
}

public void startListening(Activity mContext){
    FingerprintManagerCompat.from(mContext).authenticate(null, 0, null, new MyCallBackCompat(), null);
}

public class MyCallBackCompat extends FingerprintManagerCompat.AuthenticationCallback{
    private static final String TAG = "MyCallBackCompat";

    @Override
    public void onAuthenticationError(int errMsgId, CharSequence errString) {
        super.onAuthenticationError(errMsgId, errString);
        if (errMsgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) {
            // 这里可以处理用户主动取消指纹认证的情况
            if (onFingerprintSetting != null) {
                onFingerprintSetting.onFingerprint(false);
            }
        }
    }

    public void onAuthenticationFailed(){
        if (onFingerprintSetting != null) {
            onFingerprintSetting.onFingerprint(false);
        }
    }
    public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result){
        if (onFingerprintSetting != null) {
            onFingerprintSetting.onFingerprint(true);
        }
    }

}
private OnFingerprintSetting onFingerprintSetting;


public void setOnFingerprintSetting(OnFingerprintSetting onFingerprintSetting) {
    this.onFingerprintSetting = onFingerprintSetting;
}

public interface OnFingerprintSetting{

    void onFingerprint(Boolean isSucceed);

    void onFingerprintDisable(String errString);
}

}

————————————————

很简单的工具类,根据自己需求去在工具类中更改

举报

相关推荐

0 条评论