Android6.0指纹识别开发实例详解
发布时间 - 2026-01-11 00:41:54 点击率:次Android6.0指纹识别开发实例详解

最近在做android指纹相关的功能,谷歌在android6.0及以上版本对指纹识别进行了官方支持。当时在FingerprintManager和FingerprintManagerCompat这两个之间纠结,其中使用FingerprintManager要引入com.android.support:appcompat-v7包,考虑到包的大小,决定使用v4兼容包FingerprintManagerCompat来实现。
主要实现的工具类FingerprintUtil:验证手机是否支持指纹识别方法callFingerPrintVerify(),主要验证手机硬件是否支持(6.0及以上),有没有录入指纹,然后有没有开启锁屏密码,开始验证对于识别成功,失败可以进行相应的回调处理。
实例代码:
public class FingerprintUtil{
private FingerprintManagerCompat mFingerprintManager;
private KeyguardManager mKeyManager;
private CancellationSignal mCancellationSignal;
private Activity mActivity;
public FingerprintUtil(Context ctx) {
mActivity = (Activity) ctx;
mFingerprintManager = FingerprintManagerCompat.from(mActivity);
mKeyManager = (KeyguardManager) mActivity.getSystemService(Context.KEYGUARD_SERVICE);
}
public void callFingerPrintVerify(final IFingerprintResultListener listener) {
if (!isHardwareDetected()) {
return;
}
if (!isHasEnrolledFingerprints()) {
if (listener != null) {
listener.onNoEnroll();
}
return;
}
if (!isKeyguardSecure()) {
if (listener != null) {
listener.onInSecurity();
}
return;
}
if (listener != null) {
listener.onSupport();
}
if (listener != null) {
listener.onAuthenticateStart();
}
if (mCancellationSignal == null) {
mCancellationSignal = new CancellationSignal();
}
try {
mFingerprintManager.authenticate(null, 0, mCancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
//多次尝试都失败会走onAuthenticationError,会停止响应一段时间,提示尝试次数过多,请稍后再试。
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
if (listener != null)
listener.onAuthenticateError(errMsgId, errString);
}
//指纹验证失败走此方法,例如小米前4次验证失败走onAuthenticationFailed,第5次走onAuthenticationError
@Override
public void onAuthenticationFailed() {
if (listener != null)
listener.onAuthenticateFailed();
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
if (listener != null)
listener.onAuthenticateHelp(helpMsgId, helpString);
}
//当验证的指纹成功时会回调此函数,然后不再监听指纹sensor
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
if (listener != null)
listener.onAuthenticateSucceeded(result);
}
}, null);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 是否录入指纹,有些设备上即使录入了指纹,但是没有开启锁屏密码的话此方法还是返回false
*
* @return
*/
private boolean isHasEnrolledFingerprints() {
try {
return mFingerprintManager.hasEnrolledFingerprints();
} catch (Exception e) {
return false;
}
}
/**
* 是否有指纹识别硬件支持
*
* @return
*/
public boolean isHardwareDetected() {
try {
return mFingerprintManager.isHardwareDetected();
} catch (Exception e) {
return false;
}
}
/**
* 判断是否开启锁屏密码
*
* @return
*/
private boolean isKeyguardSecure() {
try {
return mKeyManager.isKeyguardSecure();
} catch (Exception e) {
return false;
}
}
/**
* 指纹识别回调接口
*/
public interface IFingerprintResultListener {
void onInSecurity();
void onNoEnroll();
void onSupport();
void onAuthenticateStart();
void onAuthenticateError(int errMsgId, CharSequence errString);
void onAuthenticateFailed();
void onAuthenticateHelp(int helpMsgId, CharSequence helpString);
void onAuthenticateSucceeded(FingerprintManagerCompat.AuthenticationResult result);
}
public void cancelAuthenticate() {
if (mCancellationSignal != null) {
mCancellationSignal.cancel();
mCancellationSignal = null;
}
}
public void onDestroy() {
cancelAuthenticate();
mKeyManager = null;
mFingerprintManager = null;
}
参考了一些资料,做了一些验证,得到一些结论:
1、当指纹识别失败后,会调用onAuthenticationFailed()方法,这时候指纹传感器并没有关闭,谷歌原生系统给了我们5次重试机会,也就是说,连续调用了4次onAuthenticationFailed()方法后,第5次会调用onAuthenticateError(int errMsgId, CharSequence errString)方法,此时errMsgId==7。
2、每次重新授权,哪怕不去校验,取消时会走onAuthenticateError(int errMsgId, CharSequence errString) 方法,其中errMsgId==5,
3、当系统调用了onAuthenticationError()和onAuthenticationSucceeded()后,传感器会关闭,只有我们重新授权,再次调用authenticate()方法后才能继续使用指纹识别功能。
4、兼容android6.0以下系统的话,不要使用FingerprintManagerCompat, 低于M的系统版本,FingerprintManagerCompat无论手机是否有指纹识别模块,均认为没有指纹识别,可以用FingerprintManager来做。
5、考虑到安全因素,最好authenticate(CryptoObject crypto, CancellationSignal cancel, int flags, AuthenticationCallback callback, Handler handler)时加入CryptoObject 。crypto这是一个加密类的对象,指纹扫描器会使用这个对象来判断认证结果的合法性。这个对象可以是null,但是这样的话,就意味着app无条件信任认证的结果,这个过程可能被攻击,数据可以被篡改,这是app在这种情况下必须承担的风险。因此,建议这个参数不要置为null。这个类的实例化有点麻烦,主要使用javax的security接口实现。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Android6.0指纹识别开发
# Android
# 指纹识别
# Android 指纹识别详解及实现方法
# Android获取apk签名指纹的md5值(防止重新被打包)的实现方法
# android 指纹识别调用实现方法及示例代码
# Android中的指纹识别demo开发实例
# Android 6.0指纹识别App开发案例
# Android7.0指纹服务FingerprintService实例介绍
# Android指纹识别API初试
# Android6.0指纹识别开发案例
# Android 指纹识别开发实例
# Android指纹登录工具类封装
# 回调
# 考虑到
# 这是
# 可以用
# 不去
# 这是一个
# 这两个
# 给了
# 希望能
# 来做
# 谢谢大家
# 来实现
# 在这种情况下
# 使用这个
# 再试
# 进行了
# 重试
# 请稍后
# 这样的话
# 判断是否
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
googleplay官方入口在哪里_Google Play官方商店快速入口指南
如何快速搭建高效简练网站?
PythonWeb开发入门教程_Flask快速构建Web应用
iOS验证手机号的正则表达式
如何在景安服务器上快速搭建个人网站?
做企业网站制作流程,企业网站制作基本流程有哪些?
如何在阿里云域名上完成建站全流程?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
使用C语言编写圣诞表白程序
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
想要更高端的建设网站,这些原则一定要坚持!
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
Bootstrap整体框架之JavaScript插件架构
Laravel如何与Pusher实现实时通信?(WebSocket示例)
详解阿里云nginx服务器多站点的配置
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
开心动漫网站制作软件下载,十分开心动画为何停播?
如何在Windows 2008云服务器安全搭建网站?
企业网站制作这些问题要关注
如何在阿里云购买域名并搭建网站?
米侠浏览器网页背景异常怎么办 米侠显示修复
网页设计与网站制作内容,怎样注册网站?
bing浏览器学术搜索入口_bing学术文献检索地址
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
高防服务器如何保障网站安全无虞?
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
javascript日期怎么处理_如何格式化输出
php增删改查怎么学_零基础入门php数据库操作必知基础【教程】
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
详解Android中Activity的四大启动模式实验简述
如何在企业微信快速生成手机电脑官网?
Laravel中的Facade(门面)到底是什么原理
香港服务器如何优化才能显著提升网站加载速度?
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
android nfc常用标签读取总结
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
在centOS 7安装mysql 5.7的详细教程
php打包exe后无法访问网络共享_共享权限设置方法【教程】
韩国服务器如何优化跨境访问实现高效连接?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
Laravel如何使用Sanctum进行API认证?(SPA实战)
如何在阿里云服务器自主搭建网站?
Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧

