众所周知,
Android阵营里的指纹兼容真可谓是一团糟,
每个厂家几乎都有一套自己的API,
直到Android M的出现,
才慢慢地走上正途。
那么今天我们就一起来探讨一下,
Android M里指纹API的使用。
想要实现其实还是很简单的,
第一步,
AndroidManifest.xml里加权限:
<!--指纹权限-->
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
第二步,
准备工作,
需要的主要有一个工具类和两个方法:
工具类代码很简单,如下:
public class FingerUtil {
private CancellationSignal signal;
private FingerprintManagerCompat fingerprintManager;
public FingerUtil(Activity activity) {
signal = new CancellationSignal();
fingerprintManager = FingerprintManagerCompat.from(activity);
}
public void startFingerListen(FingerprintManagerCompat.AuthenticationCallback callback) {
fingerprintManager.authenticate(null, 0, signal, callback, null);
}
public void stopsFingerListen() {
signal.cancel();
signal = null;
}
}
然后就是两个方法,
第一个方法:
检测当前设备是否有指纹模块:
/**
* 检测是否有指纹模块
*
* @return 是否有指纹模块
*/
private boolean checkFingerModule() {
try {
FingerprintManager fingerManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
return fingerManager.isHardwareDetected();
} catch (Exception e) {
return false;
}
}
第二个方法:
初始化指纹模块:
// 实例化指纹监听
mFingerListen = new FingerprintManagerCompat.AuthenticationCallback() {
/**
* 指纹识别成功
*/
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
tv_log.setText("指纹识别成功");
}
/**
* 识别失败
*/
@Override
public void onAuthenticationFailed() {
tv_log.setText("指纹识别失败");
}
/**
* Msg监听
* @param helpMsgId Msg码
* @param helpString Msg文案
*/
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
if (tv_log.getTag() != null && false == (Boolean) tv_log.getTag()) {
return;
}
switch (helpMsgId) {
case 1001: // 等待按下手指
tv_log.setText("请按下手指");
break;
case 1002: // 手指按下
tv_log.setText("正在识别…");
break;
case 1003: // 手指抬起
tv_log.setText("手指抬起,请重新按下");
break;
}
}
/**
* 多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证
* @param errMsgId 错误码
* @param errString 剩余禁用时间
*/
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
switch (errMsgId) {
case 5: // 可以进行识别
tv_log.setTag(true);
break;
case 7: // 失败次数过多,禁用倒计时未结束
tv_log.setText("失败次数过多!请" + errString + "秒后再试");
break;
}
}
};
// 实例化工具类
mFingerUtil = new FingerUtil(this);
// 使用指纹监听监听
mFingerUtil.startFingerListen(mFingerListen);
}
准备工作完成,
剩下的就简单咯。
第三步——使用:
这一步就特别简单了:
try {
// 初始化指纹按钮点击事件
initFingerBtnClick();
} catch (Exception e) {
tv_log.setText("当前设备没有指纹识别模块\n或未遵循 Android M 指纹API规范");
}
到这里基本就完成了,
但是有一点需要注意,
onStop()的时候一定要把指纹关闭,
以免一直占用指纹模块:
@Override
protected void onStart() {
super.onStart();
if (mFingerUtil != null && mFingerListen != null) {
mFingerUtil.startFingerListen(mFingerListen);
}
}
@Override
protected void onStop() {
super.onStop();
if (mFingerUtil != null) {
mFingerUtil.stopsFingerListen();
}
}
尘少老规矩,附源码:
http://download.csdn.net/download/bamboy_/9782241
如果觉得尘少的Demo还不错的话,
可以克隆我的Git仓库,
各种酷炫效果收入囊中:
https://github.com/Bamboy120315/bamboy.git
手机扫码下载App一睹为快: