过去,可以使用以下方法获得电话选择器:
implementation "com.google.android.gms:play-services-auth:20.7.0"
代码:
private val requestFillPhoneNumber: ActivityResultLauncher<IntentSenderRequest> =
registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult()) { result: ActivityResult ->
if (result.resultCode != Activity.RESULT_OK)
return@registerForActivityResult
val cred: Credential = result.data?.getParcelableExtraCompat(Credential.EXTRA_KEY)
?: return@registerForActivityResult
val phoneNumber = cred.id
Log.d("AppLog", "phone:$phoneNumber")
}
private fun showPhonePickerDialog() {
val hintRequest = HintRequest.Builder().setPhoneNumberIdentifierSupported(true).build()
val intent = Credentials.getClient(this).getHintPickerIntent(hintRequest)
try {
requestFillPhoneNumber.launch(IntentSenderRequest.Builder(intent.intentSender).build())
} catch (e: Exception) {
Log.d("AppLog", "failed to show phone picker using old method:$e")
}
}
最近出现了一个新版本,删除了这些类,所以我可以使用的是:
implementation 'com.google.android.gms:play-services-auth:21.1.1'
代码:
private val phoneNumberHintIntentResultLauncher: ActivityResultLauncher<IntentSenderRequest> =
registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult()
) { result ->
try {
val phoneNumber =
Identity.getSignInClient(this).getPhoneNumberFromIntent(result.data)
Log.d("AppLog", "phone:$phoneNumber")
} catch (e: Exception) {
Log.d("AppLog", "failed to get phone number from picker:$e")
}
}
private fun showNewPhonePickerDialog() {
val request: GetPhoneNumberHintIntentRequest =
GetPhoneNumberHintIntentRequest.builder().build()
Identity.getSignInClient(this)
.getPhoneNumberHintIntent(request)
.addOnSuccessListener {
phoneNumberHintIntentResultLauncher.launch(
IntentSenderRequest.Builder(it.intentSender).build()
)
}
.addOnFailureListener { e ->
Log.d("AppLog", "failed to show phone picker using new method:$e")
}
}
事实是,这是非常不一致的,有时也是错误的:
com.google.android.gms.common.api.ApiException: 16: No phone number is found on this device.
。未显示该对话框。https://libphonenumber.appspot.com/
虽然有这些的替代方案(
subscriptionManager.activeSubscriptionInfoList
与subscriptionManager.getPhoneNumber
,以及旧的telephonyManager.line1Number
),但使用电话权限,这应该是官方方式,让用户选择。
过去我曾尝试报告该问题,但至今仍未解决:
https://issuetracker.google.com/issues/266967506
无法实例化中介适配器类。 您好,我之前看到您反馈过Facebook广告中介适配器问题,请问您这个问题是否已经解决了?打扰一下。我期待您的回复。