СМС-ретривер api android не работает in vivo v15 pro, redmi note 4 - PullRequest
12 голосов
/ 06 февраля 2020

Я успешно внедрил SMS-ретривер в свое приложение, используя инструкцию здесь . Мой код работает нормально и otp автоматически заполняется на многих устройствах, но некоторые устройства, такие как vivo v15 pro, redmi note 4, не работают (onReceive () BroadcastReceiver не запускается). я приложил свой код здесь. проверьте и дайте мне знать, если у вас есть какое-либо решение для этого. Спасибо

Манифест. xml

     <receiver
            android:name=".sms.SMSRetrieverBroadcastReceiver"
            android:enabled="true"
            android:exported="true">
        <intent-filter>
            <action android:name="com.google.android.gms.auth.api.phone.SMS_RETRIEVED" />
        </intent-filter>
    </receiver>

SMSRetrieverBroadcastReceiver.kt

   class SMSRetrieverBroadcastReceiver : BroadcastReceiver() {



companion object{
    private var otpReceiver: OtpReceiver? = null
    fun initOTPListener(receiver: OtpReceiver) {
        this.otpReceiver = receiver
    }
}

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 -> {
                // Get SMS message contents
                var otp: String = extras.get(SmsRetriever.EXTRA_SMS_MESSAGE) as String
                Timber.d("OTP_Message "+otp)
              if(otpReceiver != null) {
                    otpReceiver!!.onOTPReceived(otp)
                }
            }

            CommonStatusCodes.TIMEOUT -> {
                // Waiting for SMS timed out (5 minutes)
                // Handle the error ...
                if(otpReceiver != null) {
                    otpReceiver!!.onOTPTimeOut()
                }
        }
    }
}}

MainActivity.kt

fun startListeningForSMS() {
    SMSRetrieverBroadcastReceiver.initOTPListener(this)
    startSmsListener()
}


private fun startSmsListener() {
    val client = SmsRetriever.getClient(mContext)
    val task = client.startSmsRetriever()
    task.addOnSuccessListener {
        Timber.d("Success")
    }

    task.addOnFailureListener {
        Timber.d("Failed")
    }
}

override fun onOTPReceived(otp: String) {
    setReceivedOtp(otp)
}

override fun onOTPTimeOut() {
    setReceivedOtp(null)
}
...