3、项目搭建与权限配置:创建Android项目、添加指纹权限、配置硬件特性、检查设备兼容性
好,咱们正式开始动手了。
这一章,我会带你从零创建一个Android项目,然后一步步把指纹识别需要的权限、硬件声明、兼容性检查都配好。说白了,就是给App铺好路,让后面的指纹代码能跑起来。
我个人习惯,在项目一开始就把这些基础配置做扎实。不然写到一半发现少个权限,或者设备不兼容,回头再改,挺烦的。
3.1 创建Android项目
打开Android Studio,点"New Project"。选"Empty Views Activity",然后填项目名。我建议包名用类似 com.yourname.fingerprintdemo 这种格式,清晰好记。
语言选Kotlin,最低SDK版本选多少?嗯,这里要注意:指纹API(BiometricPrompt)是从Android 9(API 28)开始稳定支持的。如果你非要兼容更老的版本,也不是不行,但代码会复杂很多。我个人建议,新项目直接设 minSdk = 28,省心。
// build.gradle.kts (Module :app)
android {
namespace = "com.yourname.fingerprintdemo"
compileSdk = 34
defaultConfig {
applicationId = "com.yourname.fingerprintdemo"
minSdk = 28 // 推荐
targetSdk = 34
versionCode = 1
versionName = "1.0"
}
// ...
}
3.2 添加指纹权限
指纹识别需要两个权限。一个是 USE_BIOMETRIC,另一个是 USE_FINGERPRINT(这个其实已经废弃了,但为了兼容旧设备,我建议还是加上)。
打开 AndroidManifest.xml,在 <manifest> 标签里加上:
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
注意,这两个权限都是 普通权限,不需要运行时申请。你只要在清单文件里声明,系统就会自动授予。
USE_BIOMETRIC。我曾经见过一个项目,只加了 USE_FINGERPRINT,结果在Android 10以上的设备上,指纹弹窗死活不出来。排查了半天,才发现是权限问题。
3.3 配置硬件特性
这一步很多人会忽略,但我觉得挺重要的。你想想看,如果App在Google Play上架,你肯定不希望那些没有指纹硬件的设备也能搜到你的App吧?
在 AndroidManifest.xml 里,加上 <uses-feature> 声明:
<uses-feature
android:name="android.hardware.fingerprint"
android:required="true" />
把 required 设为 true,Google Play就会自动过滤掉没有指纹硬件的设备。如果你的App还支持其他认证方式(比如人脸),可以设为 false,然后在代码里做兼容处理。
true,就是"没指纹别想装";设成 false,就是"有指纹最好,没有也能用"。
3.4 检查设备兼容性
配置好了权限和硬件特性,不代表万事大吉。你想想看,有些设备虽然有指纹硬件,但可能被系统禁用了(比如企业设备策略),或者用户根本没录入指纹。这些情况,都需要在代码里检查。
Android提供了 BiometricManager 类,专门干这个事。用法很简单:
val biometricManager = BiometricManager.from(context)
when (biometricManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG)) {
BiometricManager.BIOMETRIC_SUCCESS -> {
// 设备支持指纹,并且用户已录入
Log.d("Fingerprint", "可以开始指纹认证")
}
BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE -> {
// 设备没有指纹硬件
Log.e("Fingerprint", "没有指纹硬件")
}
BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE -> {
// 硬件暂时不可用
Log.e("Fingerprint", "指纹硬件暂时不可用")
}
BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED -> {
// 用户没有录入指纹
Log.e("Fingerprint", "请先录入指纹")
}
}
这段代码,我建议放在 onCreate 或者进入指纹页面时调用。如果返回 BIOMETRIC_SUCCESS,再显示指纹按钮;否则,给出相应的提示。
canAuthenticate 返回了 BIOMETRIC_ERROR_HW_UNAVAILABLE。后来发现,是系统的一个bug,重启手机就好了。所以,如果遇到这个错误,可以提示用户重启试试。
3.5 知识体系总览
为了让你更直观地理解这一章的内容,我画了一张图。它把项目搭建、权限配置、硬件声明、兼容性检查串在了一起。你看完应该能有个整体印象。
3.6 完整清单文件示例
最后,给你一个完整的 AndroidManifest.xml 参考。把下面这段复制到你的项目里,稍微改一下包名就行。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<!-- 指纹权限 -->
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<!-- 硬件特性声明 -->
<uses-feature
android:name="android.hardware.fingerprint"
android:required="true" />
<application
android:allowBackup="true"
android:label="指纹Demo"
android:supportsRtl="true"
android:theme="@style/Theme.FingerprintDemo">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
好了,项目搭建和权限配置就到这里。下一章,我们会真正开始写指纹认证的代码。到时候,你会看到 BiometricPrompt 怎么用,回调怎么处理。嗯,先把这个基础打好,后面就顺了。