首页 > 解决方案 > 如何在 Jetpack Compose 中处理 ResolvableApiException?

问题描述

我正在尝试CredentialRequest在我的可组合物中实现一个,但我无法让ResolvableApiException处理工作。

我已经创建了一个ActivityResultLauncherusingrememberLauncherForActivityResult并且我从OnCompleteListener开始调用它,PendingIntent如下所示。

我希望这能奏效,但由于某种原因,我从未收到ActivityResult.

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

    // Handling ActivityResult here
}


val context = LocalContext.current

LaunchedEffect(Unit) {
    val credentialsRequest = CredentialRequest.Builder()
        .setAccountTypes("https://signin.example.com")
        .build()

    val credentialsClient = Credentials.getClient(context)

    // Read the stored credential if user already signed in before
    credentialsClient.request(credentialsRequest).addOnCompleteListener {
        val result = try {
            it.result?.credential?.id
        } catch (exception: Exception) {
            val resolvableException = exception.cause as? ResolvableApiException

            if (resolvableException === null) {
                // Exception not resolvable
                return@addOnCompleteListener
            }

            // User must sign in first
            launcher.launch(
                IntentSenderRequest.Builder(resolvableException.resolution)
                    .build()
            )

            return@addOnCompleteListener
        }

        // Handling result here
    }
}

我猜这可能与launcher由于重组而过时有关,但我不确定这是否可能。

我需要做什么才能收到ActivityResult

标签: androidkotlinandroid-jetpackandroid-jetpack-compose

解决方案


推荐阅读