【发布时间】:2020-01-08 15:17:10
【问题描述】:
我正在使用androidx.biometric:biometric:1.0.1 一切正常,但是当我有一个没有生物识别传感器的设备(或者当用户没有设置他的指纹等)并且我在验证我的功能输入后尝试使用DeviceCredentials数据无效。
class MainActivity : AppCompatActivity() {
private val TAG = MainActivity::class.java.name
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
findViewById<View>(R.id.first).setOnClickListener {
authenticate(MyData(1, "first"))
}
findViewById<View>(R.id.second).setOnClickListener {
authenticate(MyData(2, "second"))
}
}
private fun authenticate(data: MyData) {
Log.e(TAG, "starting auth with $data")
val biometricPrompt = BiometricPrompt(
this,
ContextCompat.getMainExecutor(this),
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
Log.e(TAG, "auth done : $data")
}
})
val promptInfo = BiometricPrompt.PromptInfo.Builder()
.setDeviceCredentialAllowed(true)
.setTitle("title")
.build()
biometricPrompt.authenticate(promptInfo)
}
}
data class MyData(
val id: Int,
val text: String
)
首先我点击我的first按钮进行身份验证,然后我点击我的second按钮进行身份验证,然后android logcat是这样的:
E/com.test.biometrictest.MainActivity: starting auth with MyData(id=1, text=first)
E/com.test.biometrictest.MainActivity: auth done : MyData(id=1, text=first)
E/com.test.biometrictest.MainActivity: starting auth with MyData(id=2, text=second)
E/com.test.biometrictest.MainActivity: auth done : MyData(id=1, text=first)
正如你在最后一行看到的 MyData id 和 text 无效! autneticate调用onAuthenticationSucceeded时函数input(data)不一样!
(如果您尝试对其进行测试,请务必使用 DeviceCredentials 而不是生物识别,我的意思是图案或密码,请取消设置您的指纹) 为什么callBack中的数据无效?
在 android 10 上运行正常或使用指纹
我不想使用 onSaveInstanceState。
【问题讨论】:
-
您是否尝试创建自定义
BiometricPrompt.AuthenticationCallback并创建您的类并将您的参数传递给构造函数?或者可能将MyData参数保留为活动参数并访问该参数? -
您在哪个 Android 版本上进行测试?与早期的 Android 版本相比,androidx 生物识别库在 Android Q 上的作用略有不同。
-
@michael AVD Android P (9.0)
-
但我认为这个问题甚至与Android无关!它可以是任何回调我错过了什么吗?
-
我认为它与android生命周期有关
标签: android kotlin android-biometric-prompt android-biometric