gpt4 book ai didi

android - 如何使用 Jetpack Compose 处理 Activity.onActivityResult()?

转载 作者:行者123 更新时间:2023-12-04 23:41:24 29 4
gpt4 key购买 nike

我正在尝试实现 sign-in hints在我使用 Jetpack Compose 的 Android 应用程序中,但此 API 需要 Activity去工作。

fun showPhoneNumberHint(activity: Activity) {
val hintRequest: HintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()

val intent = Auth.CredentialsApi.getHintPickerIntent(apiClient, hintRequest)
val requestCode = 12345

try {
startIntentSenderForResult(activity, intent.intentSender, requestCode, null, 0, 0, 0, null)
} catch (exception: SendIntentException) {
// Error handling
}
}
所以我想我必须将 Activity 对象一直传递到需要它的 Composable ,这看起来不是很干净,但它应该可以工作。
但是现在提示的结果会在Activity的 onActivityResult()中收到。而且我不确定将它返回到需要它的可组合对象的正确方法是什么。
有没有一些干净/标准/替代的方法来做到这一点?最好我只是将所有这些逻辑包含在 Composable 中。

最佳答案

我最终使用了 rememberLauncherForActivityResult结合 ActivityResultContracts.StartIntentSenderForResult()契约(Contract)以听取结果。这将返回 launcher可用于启动 Intent 。
而不是 Auth.CredentialsApi ,这需要已弃用的 GoogleApiClient , 我现在使用 Credentials.getClient .为此,我仍然需要 Activity我使用 LocalContext.current .

val phoneNumberHintLauncher = rememberLauncherForActivityResult(
contract = ActivityResultContracts.StartIntentSenderForResult()
) {
if (it.resultCode != RESULT_OK) {
return@rememberLauncherForActivityResult
}

val credential: Credential? = it.data?.getParcelableExtra(Credential.EXTRA_KEY)
val hintResult = credential?.id

if (hintResult !== null) {
phoneNumber = hintResult
}
}

val context = LocalContext.current

LaunchedEffect(Unit) {
val hintRequest: HintRequest = HintRequest.Builder()
.setPhoneNumberIdentifierSupported(true)
.build()

val phoneNumberHintIntent = Credentials.getClient(context)
.getHintPickerIntent(hintRequest)

phoneNumberHintLauncher.launch(
IntentSenderRequest.Builder(phoneNumberHintIntent)
.build()
)
}

关于android - 如何使用 Jetpack Compose 处理 Activity.onActivityResult()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67177271/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com