SMS Retriever API не прослушивает более одного SMS одновременно.Есть ли способ, которым я могу этого добиться?На самом деле на экране есть кнопка OTP.Поэтому в некоторых худших случаях необходимо прослушивать SMS несколько раз.
Я следую этому учебнику
Активность:
class MainActivity : AppCompatActivity() {
private val smsBroadcastReceiver by lazy { SMSBroadcastReceiver() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val client = SmsRetriever.getClient(this)
val retriever = client.startSmsRetriever()
retriever.addOnSuccessListener {
val listener = object : SMSBroadcastReceiver.Listener {
override fun onReceived(pin: String) {
// obtained pin
}
override fun onTimeOut() {
//TimeOut
}
}
smsBroadcastReceiver.injectListener(listener)
registerReceiver(smsBroadcastReceiver,IntentFilter(SmsRetriever.SMS_RETRIEVED_ACTION))
}
retriever.addOnFailureListener {
//Problem to start listener
}
}
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(smsBroadcastReceiver)
}
BroadcastListener
class SMSBroadcastReceiver: BroadcastReceiver() {
private var listener: Listener? = null
fun injectListener(listener: Listener?) {
this.listener = listener
}
override fun onReceive(context: Context, intent: Intent) {
if (SmsRetriever.SMS_RETRIEVED_ACTION == intent.action) {
val extras = intent.extras
val status = extras.get(SmsRetriever.EXTRA_STATUS) as Status
when (status.statusCode) {
CommonStatusCodes.SUCCESS -> {
val message = extras.get(SmsRetriever.EXTRA_SMS_MESSAGE) as String
val pattern = Pattern.compile("\\d{6}")
val matcher = pattern.matcher(message)
if (matcher.find())
listener?.onSMSReceived(matcher.group(0))
}
CommonStatusCodes.TIMEOUT -> listener?.onTimeOut()
}
}
}
interface Listener {
fun onSMSReceived(otp: String)
fun onTimeOut()
}
}