Android 接入指纹识别

news/2024/12/22 14:56:46/

接入指纹框架:https://github.com/Tencent/soter

implementation 'com.github.Tencent.soter:soter-wrapper:2.0.9'

1.Application中初始化

class IApplication : Application() {override fun onCreate() {super.onCreate()instance = thisinitSort()}private fun initSort() {val param = InitializeParamBuilder().setScenes(100).build()SoterWrapperApi.init(this, { result ->logDebug("$result")}, param)}}

2.准备密钥

  SoterWrapperApi.prepareAuthKey({ result ->logDebug("init sort = $result")if (result.errCode == SoterErrCode.ERR_OK) {//支持指纹binding.llFingerPay.visibility = View.VISIBLE} else {binding.llFingerPay.visibility = View.GONE}}, false, true, 100, null, null)

也可以通过准备密钥结果来判断是否设备是否支持指纹

3.调起系统指纹进行验证

3.1 请求验证前获取AuthenticationParam

    private var canceller: SoterBiometricCanceller? = nullfun getAuthParam(act: AppCompatActivity?, showPassword: Boolean = true): AuthenticationParam {canceller = SoterBiometricCanceller()canceller!!.refreshCancellationSignal()val param = AuthenticationParam.AuthenticationParamBuilder().setScene(100).setContext(act).setBiometricType(ConstantsSoter.FINGERPRINT_AUTH).setSoterBiometricCanceller(canceller)//用于获取挑战因子的网络封装结构体。如果在授权之前已经通过其他模块拿到后台挑战因子,则可以改为调用setPrefilledChallenge.setPrefilledChallenge("test1").setSoterBiometricStateCallback(object : SoterBiometricStateCallback {override fun onStartAuthentication() {//开始验证}override fun onAuthenticationHelp(helpCode: Int,helpString: CharSequence?) {}override fun onAuthenticationSucceed() {//验证成功}override fun onAuthenticationFailed() {//指纹错误}override fun onAuthenticationCancelled() {//用户主动取消,可能会切换密码}override fun onAuthenticationError(errorCode: Int,errorString: CharSequence?) {//验证异常}}).build()return param}

3.2 请求验证

        SoterWrapperApi.requestAuthorizeAndSign({ result ->if (result.isSuccess) {//每个手指的指纹标识val fid = result.extData.fid//指纹验证成功} else {//指纹不匹配或其他错误showFingerError(result)}}, authParam)

多个指纹,可以使用fid进行判断对比。

最后权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

http://www.ppmy.cn/news/1365076.html

相关文章

数仓项目6.0(二)数仓

中间的几步意义就在于&#xff0c;缓存中间处理数据样式&#xff0c;避免重复计算浪费算力 分层 ODS&#xff08;Operate Data Store&#xff09; Spark计算过程中&#xff0c;存在shuffle的操作&#xff0c;而shuffle会将计算过程一分为二&#xff0c;前一阶段不执行完&…

我的NPI项目之设备系统启动(八) -- Android14的GKI2.0开发步骤和注意事项

GKI是什么&#xff1f; Google为什么要推行GKI&#xff1f; GKI全称General Kernel Image。GKI在framework和kernel之间提供了标准接口&#xff0c;使得android OS能够轻松适配/维护/兼容不同的设备和linux kernel。 Google引入GKI的目的是将Framework和Kernel进一步的解耦。因…

IBM在闪存系统集成实时恶意软件I/O检测功能

IBM在其最新一代FlashCore Modules&#xff08;FCMs&#xff09;固件中集成了使用机器学习进行实时勒索软件和其他攻击检测的功能。这些FCMs是专用于IBM FlashSystem 5000和Storwize阵列的闪存驱动器&#xff0c;采用U.2外形尺寸及NVMe接口。现有的第三代FCMs分别提供4.8、9.6、…

连接未来:嵌入式系统在物联网时代的应用

连接未来&#xff1a;嵌入式系统在物联网时代的应用 随着物联网技术的不断发展&#xff0c;嵌入式系统在物联网时代扮演着至关重要的角色。嵌入式系统作为连接物理世界和数字世界的桥梁&#xff0c;为物联网的实现提供了技术支持和基础设施。以下将从几个方面探讨嵌入式系统在…

Rocky Linux 运维工具 Systemd

一、Systemd 的简介 Systemd是一个用于管理Linux系统启动进程和服务的系统和服务管理器&#xff0c;取代了传统的init系统。它提供了并行启动、依赖关系管理、动态加载服务文件等功能&#xff0c;成为现代Linux发行版中主流的初始化系统。 二、Systemd 的参数说明 [Unit] Des…

Linux设备模型(二) - kset/kobj/ktype APIs

一&#xff0c;kobject_init_and_add 1&#xff0c;kobject_init_and_add实现 /** * kobject_init_and_add() - Initialize a kobject structure and add it to * the kobject hierarchy. * kobj: pointer to the kobject to initialize * ktype: p…

来分析两道小题

一、源码 二、分析 首先它会接两个参数一个是id一个是ps&#xff0c;传递的话会包含一个flag.php&#xff0c;然后数据库连接&#xff0c;之后传递过滤&#xff0c;然后查询&#xff0c;如果查到了就会取id&#xff0c;取出来看是不是跟adog一样&#xff0c;如果是它告诉你账号…

备战蓝桥杯————k个一组反转单链表

k个反转单链表&#xff0c;顾名思义就是k个节点为一组进行反转&#xff0c;这是一道困难的题目&#xff0c;如何解答&#xff0c;可以在我们前面的反转链表中得到思路。 如何 K 个一组反转单链表 题目描述 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xf…