Biometric

Biometric是谷歌官方提供的生物识别验证类库,能调用包括目前Android设备上搭载的指纹、人脸、虹膜等系统级的生物认证。(目前大多数的国内定制ROM可能因为安全问题,仅支持指纹)

要使用 Biometric 库添加生物识别身份验证,需要添加 Biometric 库的依赖项:

    dependencies {implementation 'androidx.biometric:biometric:1.0.0-beta01'}

检查生物识别身份验证是否可用

检查生物识别是否可用:通过在 BiometricManager 类中使用 canAuthenticate() 方法,在调用 BiometricPrompt 之前检查设备是否支持生物识别身份验证。

    BiometricManager biometricManager = BiometricManager.from(this);switch (biometricManager.canAuthenticate()) {case BiometricManager.BIOMETRIC_SUCCESS:Log.d("应用可以进行生物识别技术进行身份验证。");break;case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:Log.e("该设备上没有搭载可用的生物特征功能。");break;case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:Log.e("生物识别功能当前不可用。");break;case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:Log.e("用户没有录入生物识别数据。");break;}

弹出对话框进行生物验证

在需要弹出对话框的 Activity 或 Fragment 中,使用以下代码段中所示的逻辑来显示对话框(机型为三星S8):

    private Handler handler = new Handler();private Executor executor = new Executor() {@Overridepublic void execute(Runnable command) {handler.post(command);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {//点击按钮弹出生物验证Button biometricLoginButton = findViewById(R.id.biometric_login);biometricLoginButton.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {showBiometricPrompt();}});}//生物认证的settingprivate void showBiometricPrompt() {BiometricPrompt.PromptInfo promptInfo =new BiometricPrompt.PromptInfo.Builder().setTitle("Biometric login for my app") //设置大标题.setSubtitle("Log in using your biometric credential") // 设置标题下的提示.setNegativeButtonText("Cancel") //设置取消按钮.build();//需要提供的参数callbackBiometricPrompt biometricPrompt = new BiometricPrompt(MainActivity.this,executor, new BiometricPrompt.AuthenticationCallback() {//各种异常的回调@Overridepublic void onAuthenticationError(int errorCode,@NonNull CharSequence errString) {super.onAuthenticationError(errorCode, errString);Toast.makeText(getApplicationContext(),"Authentication error: " + errString, Toast.LENGTH_SHORT).show();}//认证成功的回调@Overridepublic void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {super.onAuthenticationSucceeded(result);BiometricPrompt.CryptoObject authenticatedCryptoObject =result.getCryptoObject();// User has verified the signature, cipher, or message// authentication code (MAC) associated with the crypto object,// so you can use it in your app's crypto-driven workflows.}//认证失败的回调@Overridepublic void onAuthenticationFailed() {super.onAuthenticationFailed();Toast.makeText(getApplicationContext(), "Authentication failed",Toast.LENGTH_SHORT).show();}});// 显示认证对话框biometricPrompt.authenticate(promptInfo);}

允许使用密码、图案、PIN码等非生物识别认证

设置PromptInfo时调用setDeviceCredentialAllowed(true),允许利用设备 PIN 码、图案或密码进行身份验证。代码:

BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder().setTitle("Biometric login for my app").setSubtitle("Log in using your biometric credential").setDeviceCredentialAllowed(true).build();


官方文档中同时使用了取消按钮 setDeviceCredentialAllowed(true)setNegativeButtonText("Cancel") 非生物认证
实测会报错 Can't have both negative button behavior and device credential enabled 所以没有添加取消按钮,问题待定

参考Android开发者文档(可能需要科学上网)

Android开源>AOSP>安全性>生物识别
Android开发者文档>显示生物识别身份验证对话框

Android生物认证Biometric 四十行代码轻松实现面部识别、指纹认证相关推荐

  1. 有了danmu,二十行代码轻松愉快对弹幕进行二次开发

    废话不多,先上演示代码,py2与py3及全平台支持. 源代码见这里,欢迎 Star 与 Fork. import time, sysfrom danmu import DanMuClientdef p ...

  2. python自动修图_程序员不会用PS给女朋友修图?没关系,用Python十行代码轻松搞定-站长资讯中心...

    虽然P图 最好的还是用要学会使用PS,但是并不是每个人都会PS的,但是如果你会Python的话,也是可以为所欲为! 现代社会,不P图的人简直就像是恐龙一样稀奇,大到瘦脸瘦腿瘦全身,小到滤镜大眼高鼻梁, ...

  3. Python丨小学妹喜欢看漫画,于是我写了四十行代码获取了它所有漫画

    前因后果 公司新来的小姐姐,结果发现还是小学妹,不过吧,超级喜欢看漫画,天天给我介绍,好烦~ 现在是2022年9月15日16点30,于是我决定, 五点下班前写个代码把她说的漫画全部获取下来,应付一下~ ...

  4. 三十行代码轻松破解山东理工大学教务系统的登录问题

    程序语言:python3.6   IDE:Pycharm   浏览器:chrome浏览器 山东理工大学教务处系统在前段时间换为正方股份软件的新系统 身为山东理工大学信管系的一名"好" ...

  5. 安卓应用安全指南 5.7 使用指纹认证功能

    5.7 使用指纹认证功能 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 目 ...

  6. Android生物识别 指纹识别面部识别,生物认证Biometric的简单使用

    Android生物识别 指纹识别面部识别,生物认证Biometric的简单使用 生物认证Biometric 很多APP都要求免登录,银行什么的,要求指纹登录,密码登录,再不就是手势登录. Biomet ...

  7. python小程序代码50 到100行-Python代码不到四十行简单暴力,微信跳一跳小程序轻松过万...

    群内不定时分享干货,包括最新的python企业案例学习资料和零基础入门教程,欢迎初学和进阶中的小伙伴入群学习交流 最近微信有个小程序,并不知道大家有没有被这个游戏给刷屏,这个游戏就是跳一跳 今天就用P ...

  8. android 生物识别_如何在android中设置生物特征认证

    android 生物识别 本文的重点 (The Takeaway From This Article) Biometric authentication is an extension of fing ...

  9. android 4.4 以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实现

    ImmersionBar 项目地址:gyf-dev/ImmersionBar  简介:android 4.4 以上沉浸式状态栏和沉浸式导航栏管理,一句代码轻松实现,以及对 bar 的其他设置,详见 R ...

最新文章

  1. apache安装mod_ssl.so 出现 undefined symbol: ssl_cmd_SSLPassPhraseDialog错误解决
  2. 五丶阿东安装部署教程+青龙对接阿东及傻妞实现自动登录
  3. CNN卷积层图像和矩阵转换函数
  4. 电脑分辨率设置工具_干货分享:PPT 导出高清分辨率图片的四种方法
  5. java 枚举高级应用_【后端】java基础(5.6)java高级基础之枚举
  6. 对cv::findHomography未定义的引用的解决方法
  7. swift版的GCD封装
  8. css两列等高,css 多列等高
  9. C#3.0 为我们带来什么(3) —— 初始化器
  10. vidalia 更换浏览器代理
  11. java编程输入学生成绩 判断最高分_从键盘输入本次Java考试五位学生的成绩,求考试成绩最高分_学小易找答案...
  12. 宁波市建筑物矢量数据(Shp格式+带高度)
  13. 深度遍历和广度遍历(图解)
  14. 如何在华为应用市场上传APP
  15. 2086689-01-0,N-(Azido-PEG2)-N-Boc-PEG3-acid末端羧酸可在活化剂(例如EDC或HATU)存在下与伯氨基反应
  16. 我的挣扎 与 TBtools 的开发
  17. 学习汇编对编程有什么帮助?如何学习
  18. 腾讯T3手把手教你!从底层开始带你了解并发编程,重要概念一网打尽!
  19. 我的第一个html网页(完整代码)
  20. Silverstack Lab for Mac(媒体资源数据管理工具)激活版

热门文章

  1. hdmi怎么支持2k分辨率_选择2K显示器有没有必要?
  2. SecureCRT win7 安装破解使用
  3. Origin 不连续数据点做出连续曲线
  4. 使用 docker 对容器资源进行限制
  5. php怎么安装ecshop,ECSHOP4.0安装教程【ECSHOP4.0安装流程方法】ECSHOP4.0安装步骤-ECSHOP教程网...
  6. 进阶项目(6)LCD12864液晶屏幕设计讲解
  7. 微波雷达传感器感应模块,智能安防过滤雨水树叶干扰技术应用
  8. 网络协议 11 - Socket 编程(下):眼见为实耳听为虚
  9. PT100转RS485热电阻Modbus低成本数据采集模块
  10. 微信支付中的p12证书提取公钥、私钥、证书、序列号等