Android SMS Verification API 结果码始终为 0
Posted
技术标签:
【中文标题】Android SMS Verification API 结果码始终为 0【英文标题】:Android SMS Verification API result code is always 0 【发布时间】:2020-10-17 20:58:49 【问题描述】:我在同一个项目的活动和片段上实现了 android SMS 验证 API,并且运行良好。我的问题是标签中的片段。无论我做什么,当按下“允许”时,onActivityResult 总是返回结果代码 0。这是我的大量代码,它们也被实现和测试以处理活动和片段。
override fun onStart()
super.onStart()
registerToSmsBroadcastReceiver()
override fun onStop()
myActivity.unregisterReceiver(smsBroadcastReceiver)
super.onStop()
private fun startSmsUserConsent()
SmsRetriever.getClient(myActivity).also
it.startSmsUserConsent(null)
.addOnSuccessListener
Log.d("LISTENING", "SUCCESS")
.addOnFailureListener
Log.d("LISTENING", "FAIL")
private fun registerToSmsBroadcastReceiver()
smsBroadcastReceiver = SmsBroadcastReceiver().also
it.smsBroadcastReceiverListener =
object : SmsBroadcastReceiver.SmsBroadcastReceiverListener
override fun onSuccess(intent: Intent?)
intent?.let context -> startActivityForResult(context, REQ_USER_CONSENT)
override fun onFailure()
val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
myActivity.registerReceiver(smsBroadcastReceiver, intentFilter)
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
super.onActivityResult(requestCode, resultCode, data)
when (requestCode)
REQ_USER_CONSENT ->
if ((resultCode == Activity.RESULT_OK) && (data != null))
val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
val code = message?.let fetchVerificationCode(it)
otpField.setText(code)
private fun fetchVerificationCode(message: String): String
return Regex("(\\d6)").find(message)?.value ?: ""
哦,每当我调用 API 发送 OTP 时,都会调用 startSmsUserConsent()
。我错过了什么?
谢谢。
【问题讨论】:
【参考方案1】:我通过在活动而不是片段上处理 OTP SMS 检索解决了这个问题,然后在需要时传递片段。
【讨论】:
以上是关于Android SMS Verification API 结果码始终为 0的主要内容,如果未能解决你的问题,请参考以下文章
Android - 查询 SMS ContentProvider?
Android 短信内容 (content://sms/sent)
xml 示例如何使用Unity3D和SMS Manager在Android中发送SMS。 (无需打开SMS Composer)
在 Android 中发送和接收 SMS 和 MMS(Kit Kat Android 4.4 之前)