startIntentSenderForResult在Android中已经被弃用。

6

代码片段:

private fun requestHint() {
    val hintRequest = HintRequest.Builder()
        .setPhoneNumberIdentifierSupported(true)
        .build()
    val credentialsClient = Credentials.getClient(this)
    val intent = credentialsClient.getHintPickerIntent(hintRequest)
    try {
        startIntentSenderForResult(
            intent.intentSender,
            CREDENTIAL_PICKER_REQUEST,
            null, 0, 0, 0
        )
    } catch (e: IntentSender.SendIntentException) {
        e.printStackTrace()
    }
}

我尝试从文档中解决这个问题,但我并没有理解。

如果有人知道如何解决,请帮忙。
谢谢。

1个回答

16
使用以下代码 -
private fun showPhoneNumberSuggestion() {

    val hintRequest = HintRequest.Builder()
        .setPhoneNumberIdentifierSupported(true)
        .build()

    val options = CredentialsOptions.Builder()
        .forceEnableSaveDialog()
        .build()

    // Then pass the hint request object to
    // credentialsClient.getHintPickerIntent()
    // to get an intent to prompt the user to
    // choose a phone number.

    val credentialClient = Credentials.getClient(applicationContext, options)
    val intent = credentialClient.getHintPickerIntent(hintRequest)
    try {

        val intentSenderRequest = IntentSenderRequest.Builder(intent.intentSender).build()
        phonePickIntentResultLauncher.launch(intentSenderRequest)

    } catch (e: IntentSender.SendIntentException) {
        e.printStackTrace()
    }
}

使用ActivityResult-

private val phonePickIntentResultLauncher =
    registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
        if (result != null) {
            val intent = result.data
            val credential = intent?.getParcelableExtra<Credential>(Credential.EXTRA_KEY)
            binding.inputPhone.setText(credential?.id)
        }
    }

记住,没有请求代码。
为每个特定任务使用不同的结果启动器。
更新2023:
上述方法现已弃用。
现在要检索电话号码,我们必须像这样使用{{link1:SignInClient}}。
private fun showPhoneNumberSuggestion() {
    val signInClient = Identity.getSignInClient(this)
    signInClient.getPhoneNumberHintIntent(GetPhoneNumberHintIntentRequest.builder().build())
        .addOnCanceledListener {

        }
        .addOnSuccessListener {
            val intentSenderRequest = IntentSenderRequest.Builder(it).build()
            phonePickIntentResultLauncher.launch(intentSenderRequest);
        }
        .addOnFailureListener {

        }
}

private val phonePickIntentResultLauncher =
    registerForActivityResult(ActivityResultContracts.StartIntentSenderForResult()) { result ->
        if (result != null) {
            val intent = result.data
            val phoneNumber = intent!!.getStringExtra("phone_number_hint_result")
        }
    }

确保从这个包中导入所有内容,com.google.android.gms.auth.api

1
这在Android 12中无法工作。出现以下错误。 Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.如何在此处设置FLAG_IMMUTABLE标志? - Chinmay
@Chinmay 对于上述提到的问题有任何更新吗? - Mukund Jogi
到目前为止,我还没有收到任何关于这个问题的更新。 - Chinmay
@Chinmay,你能解决这个问题吗? - Liya
1
@Liya,答案已更新。 - Vaibhav Goyal
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接