使用统一接口兼容库 BiometricPromptCompat 简化你的 Android 生物识别解锁支持

随着Android P的发布,BiometricPromptCompat库为开发者提供了跨版本的生物识别认证解决方案,确保了不同Android版本上的一致体验。该库不仅简化了生物识别认证的集成过程,还提升了用户体验,尤其在低版本Android设备上的兼容性表现突出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不知不觉,指纹识别解锁已经完成普及很久,当年 Google 在 Android 6.0 版本(SDK 23)方才加入统一的接口,如今已有很多应用程序适配支持了。 FingerprintManager 确实提供了非常便捷的接口供开发者,但没有统一的界面,需要应用程序各自实现自己的 UI,结果出来的效果五花八门、体验一般。

现在 Android P 为开发者们换来了更加简单的 BiometricPrompt,由系统来提供统一的界面,也为更多的生物识别传感器解锁支持提供可能(字面意思上的理解,现在使用 Biometric 一词取代了 Fingerprint),未来系统允许第三方应用面容特征解锁时,开发者亦无需再额外编写代码接入。

介绍 BiometricPromptCompat

源码地址: https://github.com/fython/BiometricPromptCompat

BiometricPromptCompat 是为兼容低版本 Android 而设计的,它的界面十分接近于原版 BiometricPrompt 以保证在不同的 Android 上有一致的效果。

当然在 Android P 或者更新的版本我们还会用原来的 BiometricPrompt 接口,尽管不能保证不同设备上的界面一致,因为系统厂商们会以他们的风格重新设计。(但没有关系,我认为系统厂商有权利统一自己的系统风格,而且不同的生物识别解锁也需要不同的界面)

我们需要意识到在 Android 6.0~8.1 版本中只有指纹传感器会被支持,很抱歉我暂时没有计划去适配成千上万系统中不相容的接口们。

基本需求

  • Platform SDK for Android P (android-28)
  • Android Studio 3.1+

举个例子

我们推荐在使用这个库前先了解 FingerprintManager 或 BiometricPrompt 的使用,所有你想知道的都可以在那找到。

首先引入依赖到你的应用 Module 中(build.gradle):

dependencies {
     implementation 'moe.feng.support.biometricprompt:library:1.0.0'
}

接下来通过 BiometricPromptCompat.isHardwareDetected(Context) 来得知硬件是否支持(会包括 Android 版本检查)。

经过确认后,才可开始构建对话框并开始认证:

final BiometricPromptCompat biometricPrompt = new BiometricPromptCompat.Builder(context)
        .setTitle("标题")
        .setSubtitle("副标题")
        .setDescription("描述:吧啦吧啦吧啦吧啦吧啦……")
        .setNegativeButton("使用密码", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(
                    context,
                    "你请求了密码解锁。",
                    Toast.LENGTH_LONG).show();
            }
        })
        .build();

biometricPrompt.authenticate(cancellationSignal, myCallback);

相关链接

FingerprintManager 参考

BiometricPrompt 参考

Android P Preview 改动介绍中的生物识别解锁部分说明

效果展示

Android 8.1

Android-O.png

Android P Preview

Android-P.png

还有……

支付宝、微信为何不使用统一接口?

众所周知,支付宝和微信的指纹支付功能欲为 Android 所用还需系统中置入他们的私有库并获得他们的认证方可使用,两家中国互联网巨头不约而同道如此做法是为了安全,甚有相关原理分析文章发表(微信 SOTER)。假设 Google 真的在过去留下了坑,随时时间推移他们也会发现问题存在并解决,而国内这些方案为何又不被采纳入 AOSP 中。

从某厂热门手游的 “高帧率模式支持” 一词被炒热来看,这些不兼容的接口支持,或为一种软件厂商给予硬件厂商的营销手段,与此同时自己也在高权限空间占有一席之地,当中的利益关系不容小觑。

结果或好或坏,为了小部分破解获得 root 权限又不注重软件安全的用户的数据、财产安全而牺牲了所有使用非国产系统或手机的用户体验,实在划不来。国内直接使用 Android 原生接口的软件数不胜数,单是美团、招商银行就有相当大的用户量了,我们也应该放心地去使用统一接口。

怎样同时使用用户设定的 PIN、图案锁定作为解锁方式

早在 Android 5.0 KeyguardManager 就提供了 createConfirmDeviceCredentialIntent 方法可以创建一个打开系统设置认证界面的 Intent,它的解锁方式会与锁屏保持一致,使用 startActivityForResult 去获取结果,当结果为 RESULT_OK 时则通过解锁。

这是一个依赖系统设置界面的 API 用的人比较少,不确定各个国产系统上的行为表现是否稳定,使用前建议先调查可用性(尤其是 MIUI)。

### 解决PyCharm无法加载Conda虚拟环境的方法 #### 配置设置 为了使 PyCharm 能够成功识别并使用 Conda 创建的虚拟环境,需确保 Anaconda 的路径已正确添加至系统的环境变量中[^1]。这一步骤至关重要,因为只有当 Python 解释器及其关联工具被加入 PATH 后,IDE 才能顺利找到它们。 对于 Windows 用户而言,在安装 Anaconda 时,默认情况下会询问是否将它添加到系统路径里;如果当时选择了否,则现在应该手动完成此操作。具体做法是在“高级系统设置”的“环境变量”选项内编辑 `Path` 变量,追加 Anaconda 安装目录下的 Scripts 文件夹位置。 另外,建议每次新建项目前都通过命令行先激活目标 conda env: ```bash conda activate myenvname ``` 接着再启动 IDE 进入工作区,这样有助于减少兼容性方面的问题发生概率。 #### 常见错误及修复方法 ##### 错误一:未发现任何解释器 症状表现为打开 PyCharm 新建工程向导页面找不到由 Conda 构建出来的 interpreter 列表项。此时应前往 Preferences/Settings -> Project:...->Python Interpreter 下方点击齿轮图标选择 Add...按钮来指定自定义的位置。按照提示浏览定位到对应版本 python.exe 的绝对地址即可解决问题。 ##### 错误二:权限不足导致 DLL 加载失败 有时即使指定了正确的解释器路径,仍可能遇到由于缺乏适当的操作系统级许可而引发的功能缺失现象。特别是涉及到调用某些特定类型的动态链接库 (Dynamic Link Library, .dll) 时尤为明显。因此拥有管理员身份执行相关动作显得尤为重要——无论是从终端还是图形界面触发创建新 venv 流程均如此处理能够有效规避此类隐患。 ##### 错误三:网络连接异常引起依赖下载超时 部分开发者反馈过因网速慢或者其他因素造成 pip install 操作中途断开进而影响整个项目的初始化进度条卡住的情况。对此可尝试调整镜像源加速获取速度或是离线模式预先准备好所需资源包后再继续后续步骤。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值