kotlin 带Jetpack组合的生物统计学提示

btqmn9zl  于 2023-01-05  发布在  Kotlin
关注(0)|答案(5)|浏览(130)

BiometricPrompt在其构造函数中需要Fragment或FragmentActivity。我无法从Composable屏幕中找到如何使用BiometricPrompt,文档中没有,任何教程中也没有。这里有人处理过同样的问题吗?或者有没有其他方法在完全构建的Composes应用程序中使用生物特征认证?

wbgh16ku

wbgh16ku1#

FragmentActivity子类化MainActivity,然后在可组合中获取上下文:

val context = LocalContext.current as FragmentActivity

看看github上的一些例子:https://github.com/search?l=kotlin&q=BiometricPrompt%20composable&type=Code

kq4fsx7k

kq4fsx7k2#

好吧,最后这很简单,但是花了我几个小时,所以这里是任何在这方面挣扎的人的答案。
请确保您的MainActivity继承自FragmentActivity()。然后您将能够将LocalContext.current强制转换为FragmentActivity。

val context = LocalContext.current as FragmentActivity
val biometricPrompt = BiometricPrompt(
    context,
    authenticationCallback
)
jogvjijk

jogvjijk3#

ComponetActivity()替换为FragmentActivity(),然后使用FragmentActivity()中的正常合成视图

setContent {
            FingerPrintAppTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(), color = MaterialTheme.colorScheme.background
                ) {
                    Greeting("Android")
                }
            }
        }

那么一切都正常

bvhaajcl

bvhaajcl4#

对于那些无法更改其Activity基类的用户,可以通过issuetracker.google.com/issues/178855209请求biometric-compose工件。遗憾的是,截至1.2.0-alpha04版本,尚未针对此工件进行任何工作。

r1zk6ea1

r1zk6ea15#

您可以从AppCompatActivity继承,AppCompatActivity从FragmentActivity继承,FragmentActivity从ComponentActivity继承。
然后您可以:

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
)

相关问题