基础人脸识别模块
添加依赖
请添加基本依赖,不要添加 ktx 版本的依赖,因为他需要 API33 及以上才可以使用!
implementation 'androidx.biometric:biometric:1.1.0'
人脸识别工具类
package com.zhiyiyi.bio.bio
import android.content.Context
import android.os.Handler
import android.widget.Toast
import androidx.biometric.BiometricPrompt
import androidx.fragment.app.FragmentActivity
import java.util.concurrent.Executor
class BioUtils(
val context: Context,
val fragment: FragmentActivity,
) {
// 注册事件监听者与执行器
val handler = Handler()
val executor = Executor {
handler.post(it)
}
// 拉取人脸识别窗口
open fun showBiometricPrompt() {
// 配置人脸识别窗口的提示信息
var propertyInfo = BiometricPrompt.PromptInfo.Builder().apply {
setTitle("登陆人脸验证")
setSubtitle("请确保面部信息清晰")
setNegativeButtonText("取消识别")
}.build()
// 传入识别事件处理回调函数后,即可正常进入启动人脸识别流程
var biometricPrompt = BiometricPrompt(fragment, executor, auth())
biometricPrompt.authenticate(propertyInfo)
}
// 使用一个内部类实现识别回调函数(因为他是一个抽象函数)
// 需要实现三个方法,分别是识别错误、成功、失败的执行方法
inner class auth : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
Toast.makeText(context, "认证成功", Toast.LENGTH_SHORT).show()
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
Toast.makeText(context, "认证成功", Toast.LENGTH_SHORT).show()
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
Toast.makeText(context, "认证成功", Toast.LENGTH_SHORT).show()
}
}
}
外部 activity 调用人脸识别
因为我们已经写好了工具类,这里直接调用就好了,注意 mainactivity 需要进行类型转换
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
biobtn.setOnClickListener {
BioUtils(
this,
this as FragmentActivity,
).showBiometricPrompt()
}
}
}