import android.Manifest;
import android.content.Context;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v4.os.CancellationSignal;
import android.widget.Toast;
import com.tbruyelle.rxpermissions.RxPermissions;
import com.xvli.aicash.R;
import com.xvli.aicash.widget.dialog.DialogCallback;
import com.yanzhenjie.nohttp.Logger;
import rx.functions.Action1;
/**
* @param
* @Comments : 指纹解锁
* @Author : Lampo
* @CreateDate : 2018/10/22 10:24
* @ModifiedBy : Lampo
* @ModifiedDate : 2018/10/22 10:24
* @Modified : 6.0以上使用前要申请权限 Manifest.permission.USE_FINGERPRINT
*/
public class FingerprintUtil {
private static FingerprintManagerCompat compat;
private static DialogCallback callBack1;
private static CancellationSignal mCancellationSignal;
/**
* 判断
*
* @param context
* @return
*/
public static boolean isFingerprintOK(final Context context) {
final boolean[] flag = {true};
try {
Class.forName("android.hardware.fingerprint.FingerprintManager"); // 通过反射判断是否存在该类
} catch (ClassNotFoundException e) {
e.printStackTrace();
Toast.makeText(context, "该手机系统版本太低,不支持指纹解锁功能", Toast.LENGTH_SHORT).show();
flag[0] = false;
return false;
}
RxPermissions.getInstance(context).request(Manifest.permission.USE_FINGERPRINT).subscribe(new Action1<Boolean>() {
@Override
public void call(Boolean aBoolean) {
if (aBoolean) {
compat = FingerprintManagerCompat.from(context);
if (!compat.hasEnrolledFingerprints()) {
Toast.makeText(context, "请查看指纹硬件是否存在且功能正常", Toast.LENGTH_SHORT).show();
flag[0] = false;
}
if (!compat.isHardwareDetected()) {
Toast.makeText(context, "请至少注册了一个指纹", Toast.LENGTH_SHORT).show();
flag[0] = false;
}
} else {
Toast.makeText(context, "指纹解锁权限申请失败", Toast.LENGTH_SHORT).show();
flag[0] = false;
}
}
});
return flag[0];
}
/**
* 打开并且监听指纹
*
* @param context
* @param callBack
*/
public static void transferFingerprint(final Context context, DialogCallback callBack) {
callBack1 = callBack;
if (FingerprintUtil.isFingerprintOK(context)) {
mCancellationSignal = new CancellationSignal();
compat.authenticate(null, 0, mCancellationSignal, new FingerAuthenticateCallBack(), null);
}
}
/**
* 关闭指纹验证
*/
public static void cancelFingerprint() {
if (callBack1 != null && mCancellationSignal != null) {
mCancellationSignal.cancel();
}
}
private static class FingerAuthenticateCallBack extends FingerprintManagerCompat.AuthenticationCallback {
// 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
Logger.d("onAuthenticationError: " + "验证失败");
if (callBack1 != null) {
callBack1.onCancel();
}
}
// 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作
@Override
public void onAuthenticationFailed() {
Logger.d("onAuthenticationFailed: " + "验证失败");
if (callBack1 != null) {
callBack1.onCancel();
}
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
}
// 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
Logger.e("onAuthenticationSucceeded: " + "验证成功");
if (callBack1 != null) {
callBack1.onConfirm();
}
}
}
}
Android 指纹解锁
猜你喜欢
转载自blog.csdn.net/u014434239/article/details/84246072
今日推荐
周排行