BiometricPrompt的构造函数要求使用Fragment或FragmentActivity。我无法找到如何在可组合屏幕中使用BiometricPrompt的方法,无论是在文档中还是在任何教程中都没有。有没有人遇到过同样的问题?或者有没有其他方法可以在完全由Compose构建的应用程序中使用生物识别身份验证?
BiometricPrompt的构造函数要求使用Fragment或FragmentActivity。我无法找到如何在可组合屏幕中使用BiometricPrompt的方法,无论是在文档中还是在任何教程中都没有。有没有人遇到过同样的问题?或者有没有其他方法可以在完全由Compose构建的应用程序中使用生物识别身份验证?
将你的MainActivity
从FragmentActivity
中继承,然后在可组合中获取你的上下文:
val context = LocalContext.current as FragmentActivity
在Github上查看一些例子:https://github.com/search?l=kotlin&q=BiometricPrompt%20composable&type=Code
对于那些无法更改其活动基类的人,可以访问issuetracker.google.com/issues/178855209请求一个biometric-compose
工件。不幸的是,截至版本1.2.0-alpha04
,还没有任何进展。
好的,最终还是比较简单的,但我花了几个小时,所以这里是答案,供那些遇到困难的人参考。
确保你的MainActivity从FragmentActivity()继承。然后你就可以将LocalContext.current转换为FragmentActivity。
val context = LocalContext.current as FragmentActivity
val biometricPrompt = BiometricPrompt(
context,
authenticationCallback
)
inline fun <reified Activity : FragmentActivity> Context.getActivity(): Activity? {
return when (this) {
is Activity -> this
else -> {
var context = this
while (context is ContextWrapper) {
context = context.baseContext
if (context is Activity) return context
}
null
}
}
}
然后:
val activity = LocalContext.current.getActivity<MainActivity>()
val biometricPrompt = BiometricPrompt(
activity,
authenticationCallback
)
将ComponetActivity()
替换为FragmentActivity()
,然后从FragmentActivity()
中使用普通的Compose视图。
setContent {
FingerPrintAppTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background
) {
Greeting("Android")
}
}
}
然后一切都正常工作。
MainActivity
从FragmentActivity
进行子类化。 - Phil Dukhov