最近开始做项目的时候,需要用到Android中的指纹识别,刚开始实在是有点懵逼,主要是别人给的意见让我把思路给堵住了,现在回过头来看看,其实也是意见很简单的事,不过最开始是因为Android6.0才刚出来没多久,对于指纹识别没有过多的介绍。也有哥们问过我通过指纹识别来进行登录,支付等操作,其实都是一样的。有指纹识别的手机可以通知指纹来实现,没有的就换一种思路嘛,判断一下,采用原始的输入密码也是一样的。现在把自己的一些收获记录下来,希望能够帮助到其他人。不了解指纹识别的可以先看看这两篇博客,对于你理解指纹识别是有帮助的。

http://blog.csdn.net/baniel01/article/details/51991764

http://blog.csdn.net/u011468824/article/details/51437795

在此对两位博主表示感谢。还有在我做指纹识别的时候对我帮助的一位同行,也非常感谢。

主要代码记录如下:

import android.Manifest;

import android.app.KeyguardManager;

import android.content.Context;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.hardware.fingerprint.FingerprintManager;

import android.os.Bundle;

import android.os.CancellationSignal;

import android.support.v4.app.ActivityCompat;

import android.support.v4.app.FragmentActivity;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class MainActivity extends FragmentActivity {

FingerprintManager manager;

KeyguardManager mKeyManager;

private final static int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 0;

private final static String TAG = “finger_log”;

@Override

protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE);

mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE);

Button btn_finger = (Button) findViewById(R.id.btn_activity_main_finger);

btn_finger.setOnClickListener(new View.OnClickListener() {    @Override

public void onClick(View v) {        if (isFinger()) {

Toast.makeText(MainActivity.this, "请进行指纹识别", Toast.LENGTH_LONG).show();

Log(TAG, "keyi");

startListening(null);

}

}

});

}

public boolean isFinger() {if (!manager.isHardwareDetected()) {

Toast.makeText(this, "没有指纹识别模块", Toast.LENGTH_SHORT).show();    return false;

}if (!mKeyManager.isKeyguardSecure()) {

Toast.makeText(this, "没有开启锁屏密码", Toast.LENGTH_SHORT).show();    return false;

}if (!manager.hasEnrolledFingerprints()) {

Toast.makeText(this, "没有录入指纹", Toast.LENGTH_SHORT).show();    return false;

}return true;

}

CancellationSignal mCancellationSignal = new CancellationSignal();

//回调方法

FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() {@Overridepublic void onAuthenticationError(int errorCode, CharSequence errString) {    //但多次指纹密码验证错误后,进入此方法;并且,不能短时间内调用指纹验证

Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show();

showAuthenticationScreen();

}@Overridepublic void onAuthenticationHelp(int helpCode, CharSequence helpString) {

Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show();

}@Overridepublic void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {

Toast.makeText(MainActivity.this, "指纹识别成功", Toast.LENGTH_SHORT).show();

}@Overridepublic void onAuthenticationFailed() {

Toast.makeText(MainActivity.this, "指纹识别失败", Toast.LENGTH_SHORT).show();

}

};

public void startListening(FingerprintManager.CryptoObject cryptoObject) {//android studio 上,没有这个会报错if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {

Toast.makeText(this, "没有指纹识别权限", Toast.LENGTH_SHORT).show();    return;

}

manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null);

}

private void showAuthenticationScreen() {Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "测试指纹识别");if (intent != null) {

startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS);

}

}

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) {    // Challenge completed, proceed with using cipher

if (resultCode == RESULT_OK) {

Toast.makeText(this, "识别成功", Toast.LENGTH_SHORT).show();

} else {

Toast.makeText(this, "识别失败", Toast.LENGTH_SHORT).show();

}

}

}

private void Log(String tag, String msg) {Log.d(tag, msg);

}

}

有人可能会想了,这应该只能在6.0以上的手机才能用吧,不是的,因为6.0以前也有指纹识别的手机,不过现在android生产厂商太多了,机制不一样可能会遇到不同的问题,我是这样解决的。首先第一种,只支持6.0以上的指纹识别的手机,就是在调用指纹识别的时候先判断一下sdk。但是这对于大多数是不太现实的,至少现在是这样,第二种就是实现指纹识别的时候可以采用FingerprintManagerCompat这个类来实现,这个是v4包的可以兼容6.0以下的,但是在6.0以上不知道是不是有问题,有兴趣的可以去了解一下。还有最后一种解决的方式,就是在调用指纹识别的时候,可以采用反射的方式来判断手机是否支持指纹识别,或者说手机是否支持指纹识别的类

Class.forName(“android.hardware.fingerprint.FingerprintManager”);

这个就是上面提到的网友帮我想到的办法,这样基本上所有的手机就可以正常使用了。

欢迎start,欢迎评论,欢迎指正

android指纹测试,Android指纹识别相关推荐

  1. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  2. android分层测试,Android视图层次和性能的检测(官方)

    在日常开发中,我们管理View对象层次结构的方式可能会对的应用程序性能产生重大影响. 本文将介绍如何评估软件视图层次结构是否会减慢你的应用程序的运行速度,并且提供了解决可能出现的问题的一些策略. 布局 ...

  3. android 人品测试,Android单元测试环境搭建采坑记录

    添加依赖 android { defaultConfig { testInstrumentationRunner "android.support.test.runner.AndroidJU ...

  4. android psensor测试,android传感器Gsensor和Psensor的使用举例

    今天leader给的任务是这样的,做一个开机自启动的后台Service,实现对重力及距离的检测 当手机屏幕朝下时,让Psensor可用.否则不可用 实现代码如下: SensorFunctionServ ...

  5. android+噪音测试,Android技术开发之:噪音测试

    首先,看看核心Activity: import android.app.Activity; import android.media.AudioFormat; import android.media ...

  6. android指纹测试,Android_指纹识别测试

    Demo地址 注意 必须要了解的是指纹识别是从6.0开始添加的 这样的话,想要使用Api就要把App改到23以上 指纹识别的库都在android.hardware.fingerprint这个包下面 申 ...

  7. android驱动测试,Android: 通过 cucumber 驱动 monkey 做稳定性测试

    主要内容 稳定性测试是什么 Monkey 介绍 自动化 Monkey 稳定性测试是什么 通过随机点击屏幕一段时间,看看 app 会不会奔溃,能不能维持正常运行. Monkey 介绍 Monkey 是一 ...

  8. android mtbf测试,Android Crash 问题分析以及解决

    Crash问题(Java与Native) 1.问题介绍 Crash问题,无论是java侧还是native侧,在日常测试中经常会遇到. Crash问题一般我们可以分为两类,一类是java侧的crash问 ...

  9. android平板 测试,Android平板电脑系统测试的设计与实施

    摘要: Android是一个基于Linux核心的开放手持平台作业操作系统.系统测试是整个测试过程中非常关键的一步,它是提高软件质量的焦点.如果在系统测试阶段没能发现足够多的缺陷,这些缺陷将会在验收测试 ...

  10. android gpu测试,Android下的性能测试

    ◆ Android平台下的性能测试 Android平台下Intel提供的是一个pre-btea版的4.2.2系统,还不是太稳定,不过可以跑测试,Intel表示在最终达到与Windows平台相等的性能之 ...

最新文章

  1. 全网最详细的Xshell或SecureCRT下spark-shell里出现无法退格或者删除的问题现象的解决办法(图文详解)...
  2. CTF web题总结--SSRF
  3. f12 卡 谷歌浏览器_干货分享。关于谷歌浏览器的使用技巧,不需要插件
  4. CentOS 7安装redis及php扩展
  5. Sybase常用配置参数
  6. 华为Mate 30 Pro曝光:双曲面刘海屏 支持3D人脸识别
  7. 概念模型——分析模式学习笔记
  8. highcharts的柱状图显示数据
  9. SwiftUI实战教程 第三章 土豆List
  10. Golang使用 阿里云OSS存储
  11. 【前端学习】ES6语法 函数写法优化
  12. 一个简单的日内交易策略
  13. 全新MN梦奈宝塔主机系统V1.5版本源码
  14. 成就亿万富翁的10条规则
  15. Apache Doris 0.11.x 版本升级
  16. 小心inneHTML的地雷
  17. 如何让便签的提醒事项间隔一段时间再次提醒
  18. uni-app接入高德地图SDK实现定位用户城市
  19. IHE注册-MOD-SWF
  20. 偷个懒,公号抠腚早报80%自动化——4.用Flask搭个简易(陋)后台

热门文章

  1. 什么是CSS hack及写法
  2. matlab 画温度分布,matlab画温度分布图
  3. 王松波 计算机科学,王松波-华南农业大学华南农业大学动物科学学院
  4. 相机标定:从世界坐标系到图像像素坐标系转换过程解析
  5. c++实现剧情小游戏:哈利波特
  6. 相机和镜头选型计算公式
  7. OS X 修改网卡 Mac 地址的方法
  8. 国内常见php的CMS建站系统情况分析
  9. windows10为何鼠标右键一点桌面就一直转圈?
  10. Datawhale组队学习(Pandas) task8-文本数据