iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android指纹识别API初试
  • 430
分享到

Android指纹识别API初试

apiAndroid 2022-06-06 08:06:57 430人浏览 安东尼
摘要

在Android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题  ①在使用FingerPrintMan

Android6.0之后谷歌对指纹识别进行了官方支持,今天还在放假,所以就随意尝试了一下这个api,但是遇到了各种各样的问题
 ①在使用FingerPrintManager这个类实现的时候发现了很多问题,这个类里面的一些函数是被hide了的,也就是我们不能调用,比如enroll(),也就是说,当前的官方支持其实是有限的,我们能读取到本机已经存在的指纹(用于解的),然后验证这些指纹,但是不能让用户在app使用的时候录入一个指纹,用于app的其他功能,这个是一个缺陷吧目前来说,下面的图也是展示了识别一个可以用来解锁的指纹的功能。
 ②使用FingerPrintManager的时候会遇到要在应用中判断权限的问题,不清楚是因为android M要求的还是api需要,调用的时候也没有反应,既没有功能,也没有提示给予权限,原因有待查证。
 ③在一顿尝试无果之后发现了两个特别的类,一个叫做FingerPrintManagerCompat,这是一个兼容的FingerPrint操作类,还有一个类似的叫做FingerPrintManagerCompatApi23,使用这两个类也能实现到识别指纹的功能,但是也是有局限的,如①所说的。这两个类都能实现这个效果,但是需要API Level 23,如果达不到不会报错,这些类会什么都不做。
展示图,因为没有真机,所以只能用模拟器调试一下,这里也只能用官方的,Genymotion免费版貌似不能模拟指纹: 


直接上代码:


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 private static final String TAG = "MainActivity";
 private Button check;
 private FingerprintManagerCompat manager;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);
 check = (Button) findViewById(R.id.btn_check);
 check.setOnClickListener(this);
 // 获取一个FingerPrintManagerCompat的实例
 manager = FingerprintManagerCompat.from(this);
 }
 @Override
 public void onClick(View v) {
 switch (v.getId()) {
 case R.id.btn_check:
 
 manager.authenticate(null, 0, null, new MyCallBack(), null);
 break;
 }
 }
 public class MyCallBack extends FingerprintManagerCompat.AuthenticationCallback {
 private static final String TAG = "MyCallBack";
 // 当出现错误的时候回调此函数,比如多次尝试都失败了的时候,errString是错误信息
 @Override
 public void onAuthenticationError(int errMsgId, CharSequence errString) {
 Log.d(TAG, "onAuthenticationError: " + errString);
 }
 // 当指纹验证失败的时候会回调此函数,失败之后允许多次尝试,失败次数过多会停止响应一段时间然后再停止sensor的工作
 @Override
 public void onAuthenticationFailed() {
 Log.d(TAG, "onAuthenticationFailed: " + "验证失败");
 }
 @Override
 public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
 Log.d(TAG, "onAuthenticationHelp: " + helpString);
 }
 // 当验证的指纹成功时会回调此函数,然后不再监听指纹sensor
 @Override
 public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult
    result) {
 Log.d(TAG, "onAuthenticationSucceeded: " + "验证成功");
 }
 }
} 

有朋友提出了问题,这里记录下:
如何让失败或者成功之后Sensor继续保持监听新的指纹?
 答:因为API较新的缘故,这个兼容的Manager类还不能做到自动重启的功能,但是我们可以自己写一个。因为Api中规定了如果回调了Error或者Succeed方法之后,sensor会被关闭,直到下一次重新调用authenticate方法授权,但是我们不能在Error或Succeed直接调用这个方法,因为处于安全性的考虑,不允许开发者短时间内连续授权,经过粗略的测试,android允许我们在30s之后重新打开Sensor授权监听,所以我们要做的,就是通过Handler的sendMessageDelayed方法发送一个延迟的消息,再在Handler中重新调用authenticate方法,具体的代码如下: 


private Handler handler = new Handler() {
 @Override
 public void handleMessage(Message msg) {
 super.handleMessage(msg);
 Log.d(TAG, "handleMessage: 重启指纹模块");
 manager.authenticate(null, 0, null, new MyCallBack(), handler);
 }
}; 

@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
 handler.sendMessageDelayed(new Message(), 1000 * 30);
 Log.d(TAG, "onAuthenticationError: " + errString);
}
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
 handler.sendMessageDelayed(new Message(), 1000 * 30);
 Log.d(TAG, "onAuthenticationSucceeded: " + "验证成功");
}
您可能感兴趣的文章:Android指纹识别认识和基本使用详解Android指纹识别功能Android指纹识别功能深入浅出分析到实战(6.0以下系统解决方案)android 指纹识别调用实现方法及示例代码Android 指纹识别详解及实现方法Android中的指纹识别demo开发实例Android指纹识别API讲解,一种更快更好的用户体验


--结束END--

本文标题: Android指纹识别API初试

本文链接: https://www.lsjlt.com/news/24734.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作