[英]Unresolved reference: getIntentSender / While trying to obtain phone number in Jetpack Compose
I am trying to obtain phone number(s) in Jetpack compose following Googles Phone Number Hint Docs .我正在尝试按照Googles Phone Number Hint Docs在 Jetpack compose 中获取电话号码。 But I am stuck in a problem where it says:
getIntentSender()
is unresolved in request: GetPhoneNumberHintIntentRequest
.但是我遇到了一个问题,它说:
getIntentSender()
is unresolved in request: GetPhoneNumberHintIntentRequest
。
I am also getting another error on addOnFailureListener
我在
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
accepts a listener, which can be passed as trailing closure. addOnSuccessListener
接受一个监听器,它可以作为尾随闭包传递。
Result passed to this listener is a pending intent which has intentSender
property, and it can be used to create IntentSenderRequest
.传递给此侦听器的结果是具有
intentSender
属性的待处理意图,可用于创建IntentSenderRequest
。
Here's a working example:这是一个工作示例:
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")
}
}) {
}
If you need to run it immediately after the view appears, use LaunchedEffect
instead of Button.onClick
.如果您需要在视图出现后立即运行它,请使用
LaunchedEffect
而不是Button.onClick
。 Your current approach contradicts one of the basic rules of Compose, which is that composable functions must be free of side-effects.您当前的方法与 Compose 的基本规则之一相矛盾,即可组合函数必须没有副作用。 Read more in thinking in compose
在 compose中阅读更多内容
According to this docs there is no getIntentSender()
method in GetPhoneNumberHintIntentRequest
class.根据此文档,
GetPhoneNumberHintIntentRequest
类中没有getIntentSender()
方法。 Maybe there is a typo in the tutorial you are following, try to use result
instead of request
:也许您正在遵循的教程中有错字,请尝试使用
result
而不是request
:
Identity.getSignInClient(context)
.getPhoneNumberHintIntent(request)
.addOnSuccessListener { result ->
try {
phoneNumberHintIntentResultLauncher.launch(result.intentSender.sendIntent)
} catch (e: Exception) {
Log.e(TAG, "Launching the PendingIntent failed")
} as OnSuccessListener<in PendingIntent>
}
.addOnFailureListener(
Log.e(TAG, "Phone Number Hint failed")
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.