我正在try 获取Jetpack中的电话号码,请在Googles Phone Number Hint Docs后填写.但我陷入了这样一个问题:getIntentSender()request: GetPhoneNumberHintIntentRequest中没有解决.

我在addOnFailureListener上也遇到了另一个错误

Type mismatch.
Required:
 OnFailureListener
Found:
 Int
@Composable
fun PhoneNumberConsent() {
    val context = LocalContext.current

    val request = GetPhoneNumberHintIntentRequest.builder().build()

    val phoneNumberHintIntentResultLauncher = rememberLauncherForActivityResult(
        contract = ActivityResultContracts.StartActivityForResult(),
    ) {
        try {
            val phoneNumber =
                Identity.getSignInClient(context)
                    .getPhoneNumberFromIntent(it.data)
        } catch (e: Exception) {
            Log.e(TAG, "Phone Number Hint failed")
        }

    }

    Identity.getSignInClient(context)
        .getPhoneNumberHintIntent(request)
        .addOnSuccessListener(
            try {
                phoneNumberHintIntentResultLauncher.launch(request.getIntentSender())
            } catch (e: Exception) {
                Log.e(TAG, "Launching the PendingIntent failed")
            } as OnSuccessListener<in PendingIntent>
        )
        .addOnFailureListener(
            Log.e(TAG, "Phone Number Hint failed")
        )
}

推荐答案

谷歌文档在这一点上真的很糟糕.addOnSuccessListener接受监听器,该监听器可以作为尾部闭包传递.

传递给此侦听器的结果是一个挂起的意图,它有intentSender个属性,可用于创建IntentSenderRequest个.

下面是一个工作示例:

val context = LocalContext.current

val request = GetPhoneNumberHintIntentRequest.builder().build()

val phoneNumberHintIntentResultLauncher = rememberLauncherForActivityResult(
    contract = ActivityResultContracts.StartIntentSenderForResult(),
) {
    try {
        val phoneNumber = Identity.getSignInClient(context)
                .getPhoneNumberFromIntent(it.data)
        println("phoneNumber $phoneNumber")
    } catch (e: Exception) {
        println("Phone Number Hint failed")
        e.printStackTrace()
    }

}

Button(onClick = {
    Identity.getSignInClient(context)
        .getPhoneNumberHintIntent(request)
        .addOnSuccessListener { pendingIntent ->
            try {
                phoneNumberHintIntentResultLauncher.launch(
                    IntentSenderRequest.Builder(
                        pendingIntent.intentSender
                    ).build()
                )
            } catch (e: Exception) {
                println("Launching the PendingIntent failed")
                e.printStackTrace()
            }
        }
        .addOnFailureListener {
            println("addOnFailureListener $it")
        }
}) {

}

如果需要在视图出现后立即运行它,请使用LaunchedEffect而不是Button.onClick.您当前的方法与Compose的一个基本规则相矛盾,即可组合函数必须没有副作用.阅读thinking in compose中的更多内容

Android相关问答推荐

以正确的方式从房间收集流量

译码BLE血糖仪特征值

Android和Rust,OpenSSL交叉编译在ARM V7上链接失败

如何更新Kotlin中的显示?

在带有REACT-Native-CLI的开发和生产中使用Firebase的最佳实践

在Jetpack Compose中实现自动换行

可组合:don';t剪辑视图

如何防止在Android Studio中设置kotlin断点时优化变量

可从 Play store 下载链接访问未发布的应用

只能从同一个库组内调用成功(引用groupId=androidx.work from groupId=My Composable)

Jetpack compose :使用 rememberSaveable 时未应用待处理的合成

我的 React Native 在 11 月 4 日之前运行良好,但现在在运行 yarn android 时抛出异常

try 使用 ViewPager2 实现滑动视图时出现类型不匹配错误

调用时 listFiles() nullpointerexception

为什么按钮没有拉伸到屏幕边缘?

Delphi 11:以编程方式查找 MSBuild 的正确工具版本

Android YouTube SDK - 视频无法在某些 Android 设备中播放

如何根据加载图像的 colored颜色 绘制边框?

Jetpack Compose Tapjacking:过滤对模糊 UI 的touch

如何获取 Material Design 3 的底部导航栏高度?