您应该使用SMS Retriever API 来读取OTP消息。下面是您可以执行此操作的方法。
您需要以下两个依赖项以获取短信检索代码。
implementation 'com.google.android.gms:play-services-auth:17.0.0'
implementation 'com.google.android.gms:play-services-auth-api-phone:17.1.0'
在您的activity/fragment中定义几个变量,像这样:
private val SMS_CONSENT_REQUEST = 2
private lateinit var smsVerificationReceiver: BroadcastReceiver
在您的onCreate()方法中启动短信检索器
SmsRetriever.getClient(this).startSmsUserConsent(null)
smsReceiver()
val intentFilter = IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION)
registerReceiver(smsVerificationReceiver, intentFilter)
以下是广播接收器的方法
private fun smsReceiver() {
smsVerificationReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
val extras = intent.extras
val smsRetrieverStatus = extras?.get(SmsRetriever.EXTRA_STATUS) as Status
when (smsRetrieverStatus.statusCode) {
CommonStatusCodes.SUCCESS -> {
val consentIntent =
extras.getParcelable<Intent>(SmsRetriever.EXTRA_CONSENT_INTENT)
try {
startActivityForResult(consentIntent, SMS_CONSENT_REQUEST)
} catch (e: ActivityNotFoundException) {
}
}
CommonStatusCodes.TIMEOUT -> {
}
}
}
}
}
}
在onActivityResult()方法中,您可以获取验证码。
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
SMS_CONSENT_REQUEST ->
if (resultCode == Activity.RESULT_OK && data != null) {
val message = data.getStringExtra(SmsRetriever.EXTRA_SMS_MESSAGE)
val oneTimeCode = parseOneTimeCode(message)
et_otp.setText(oneTimeCode.toString())
} else {
}
}
}
不要忘记在onDestroy()方法中注销接收器。
unregisterReceiver(smsVerificationReceiver)