Как заставить SMS Retriever API прослушивать несколько смс - PullRequest
0 голосов
/ 01 февраля 2019

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()
}
}
...