android 设备指纹,浅谈Android 指纹解锁技术
什么是指纹解锁技术
根据人的指纹来验证是否能够解锁的技术,类似于通过输入密码来解锁,都是通过一定的数字特征来解锁。
指纹解锁技术原理理解
首先说明每个人的每个指纹信息都是独一无二的,皮肤纹路在图案,断点,交叉点上各不相同,通过光学感应读出指纹的图片信息也是独一无二的。
先保存一个人的指纹特征(图片信息根据算法生成的数据),然后再使用时利用这个人的这个指纹特征去和先前保存的指纹特征做对比,对比一致则解锁成功,对比不一致则解锁失败,对比结果并不是100%一样,而可以按照一个比例来判定,比如90%一样,也可以判定为一致,这个可以根据硬件来设定。
指纹解锁技术的优势和缺点
优点:1.使用便捷,直接使用自身的生物特征就可判断能否使用,判别速度快,而输入数字或者拼图解锁是麻烦的并且容易被别人看到。
缺点:1.安全性不高,指纹是可以被收集的,所以一旦别人收集了你的指纹信息,那需要你指纹解锁的东西将非常危险,而且在不注意的情况下很容易被有心的人收集。
在Android中的应用开发
对Android系统来说,指纹解锁是Android6.0才添加的新功能,到Android P系统还会强化指纹解锁的功能,提供越来越便捷的API。
android.hardware.fingerprint
可以看到在Android P系统中FingerprintDialog以及其中的包含类将会替代FingerprintManager以及其中包含类。原理应该差不多,封装的更简洁易用。
废话少说,在Android手机中如何开发?
1.在应用AndroidManifest.xml文件中添加权限:
2.获取到指纹管理对象的引用:
FingerprintManagerCompat fingerprint = FingerprintManagerCompat.from(this); //v4包下的API,包装内部已经判断Android系统版本是否大于6.0,这也是官方推荐的方式
FingerprintManager fingerprint2 = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE); //Android 6.0包下的API
其实指纹对象依次调用三个方法就够了,
第一步
/**
* Determine if fingerprint hardware is present and functional.
* @return true if hardware is present and functional, false otherwise.
*/
fingerprint.isHardwareDetected(); // 判断设备是否支持指纹解锁
第二步
/**
* Determine if there is at least one fingerprint enrolled.
* @return true if at least one fingerprint is enrolled, false otherwise
*/
fingerprint.hasEnrolledFingerprints(); //判断设备是否以保存过指纹信息,至少需要保存过一个
第三步
/**
* @param crypto object associated with the call or null if none required. //不太理解,加密指纹特征还是什么,可以不加密置为null
* @param flags optional flags; should be 0 //设置标记,暂时无用
* @param cancel an object that can be used to cancel authentication //取消验证
* @param callback an object to receive authentication events //系统认证完成之后,回调该接口
* @param handler an optional handler for events //处理callback接口后,界面的处理,默认是主线程handler
*/
fingerprint.authenticate(crypto, flags,cancel,callback,handler) //验证指纹
再来说明各个参数的实现
crypto = null; //可以置为null,愿意了解的人可以参考底部博客和源码
flags = 0;
cancel = new CancellationSignal();
callback = new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
super.onAuthenticationError(errMsgId, errString);
//验证错误时,回调该方法。当连续验证5次错误时,将会走onAuthenticationFailed()方法
handler.obtainMessage(1,errMsgId,0).sendToTarget();
}
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
//验证成功时,回调该方法。fingerprint对象不能再验证
handler.obtainMessage(2).sendToTarget();
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
//验证失败时,回调该方法。fingerprint对象不能再验证并且需要等待一段时间才能重新创建指纹管理对象进行验证
handler.obtainMessage(3).sendToTarget();
}
};
handler = new Handler(getMainLooper()) { //也可以置为null,系统自动处理
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1: //验证错误
//todo 界面处理
handleErrorCode(msg.arg1);
break;
case 2: //验证成功
//todo 界面处理
cancel = null;
break;
case 3: //验证失败
//todo 界面处理
cancel = null;
break;
default:
super.handleMessage(msg);
}
};
//对应不同的错误,可以有不同的操作
private void handleErrorCode(int code) {
switch (code) {
case FingerprintManager.FINGERPRINT_ERROR_CANCELED:
//todo 指纹传感器不可用,该操作被取消
break;
case FingerprintManager.FINGERPRINT_ERROR_HW_UNAVAILABLE:
//todo 当前设备不可用,请稍后再试
break;
case FingerprintManager.FINGERPRINT_ERROR_LOCKOUT:
//todo 由于太多次尝试失败导致被锁,该操作被取消
break;
case FingerprintManager.FINGERPRINT_ERROR_NO_SPACE:
//todo 没有足够的存储空间保存这次操作,该操作不能完成
break;
case FingerprintManager.FINGERPRINT_ERROR_TIMEOUT:
//todo 操作时间太长,一般为30秒
break;
case FingerprintManager.FINGERPRINT_ERROR_UNABLE_TO_PROCESS:
//todo 传感器不能处理当前指纹图片
break;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
android 设备指纹,浅谈Android 指纹解锁技术相关推荐
- android获取存储设备根目录,浅谈android获取存储目录(路径)的几种方式和注意事项...
通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可): 第一种: 获取 /storage/emul ...
- android fps 垂直同步,浅谈Android流畅度
原标题:浅谈Android流畅度 哈哈 讲个故事 白 1 流畅度 关于流畅度谷歌官方给出的解释为:running at a consistent 60 frames per second, witho ...
- android 存储空间监控,浅谈 Android 内存监控(中)
前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...
- 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台
一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...
- Android 改造无线电,浅谈Android平台的物联网网关方案设计
提出了一种基于Android平台的物联网网关方案.该网关通过蓝牙串口通信实现物联网中WSN (无线传感器网络)中心节点和Android网关的数据传输,在Android平台上实现WSN节点信息管理并通过 ...
- android序列化好处,浅谈Android序列化
在Activity中使用方法: 1)传递单一对象,具体代码如下: // parcelable对象传递方法 public void setParcelableMethod() { Person pers ...
- 浅谈Android Architecture Components
浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...
- 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路
原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...
- android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现
从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...
- 浅谈Android文件管理器的几种实现方式(原理篇)--对我有帮助
转自 https://blog.csdn.net/weixin_33698823/article/details/87269955 浅谈Android文件管理器的几种实现方式 为了完成毕业设计,我花费 ...
最新文章
- [导入][转]常用CSS缩写语法总结
- How to Rate a Software Developer
- 用css动画写一个下红包雨的效果
- 如何告别那些没卵用的线上告警!
- 对梯度下降法的简单理解
- 可以查到的资料和可以淘到的原件 DIY 四轴
- 匿名类java的说明_Java8 Lambdas与匿名类
- Django的信号机制详解
- php找不到phpmyadmin,phpMyAdmin 安装配置方法和问题解决
- [转载] JAVA条件表达式的陷阱
- java如何获得集合的长度_Java集合长度
- FireFox不能直接调用event对象,FireFox需要通过函数参数传递事件对象
- wx.getBLEDeviceCharacteristics 微信小程序蓝牙 微信小程序热敏打印机
- datatable???
- stretchlim函数
- python异常数据处理_python中如何处理异常值
- Windows 8 相关资源 MSDN原版
- sql 不允许保存更改 解决办法
- 国内外各大网站镜像源
- 离散数学 06.04 子群及其陪集
热门文章
- java实现pdf 转 高清图片
- 曾经沧海难为水,除却巫山不是云。
- 机器人php接口,小I机器人接口[PHP版本 08.12.7]
- 浅析RTB和RTA(一)
- java个人银行账户管理程序代码改写
- 一般家用路由器买多大的合适_家用路由器选多少M(兆)的合适【图】
- 学习andriod开发之 异步加载图片(二)--- 使用其他进度条
- linux vi 表格,关于Linux vi命令 vi命令一览表
- 树莓派集成BH1750光敏传感器配置
- cpython cython_Cython的用法以及填坑姿势