Как остановить SmsReceiver? - PullRequest
       5

Как остановить SmsReceiver?

0 голосов
/ 15 сентября 2018

В моем случае, пользователи входят в систему с номером телефона, и я использую SmsReceiver, чтобы получить otp и аутентифицировать их. проблема в SmsReceiver не останавливается, и когда пользователи находятся на другой странице и случайно получает другое смс и принадлежит моему приложению, приложение закрывается.

Я знаю, почему происходит,

  1. нет кода для получения otp в классе
  2. SmsReceiver не остановлен

СЕЙЧАС Я хочу знать, как остановить SmsReceiver после того, как я его использую.

Я проверяю это Остановить приемник SMS , но у меня не работает.

это мой код:

AndroidManifest.xml

<receiver android:name=".services.SmsReceiver"
    android:permission="android.permission.BROADCAST_SMS">
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

SmsReceiver

public class SmsReceiver extends BroadcastReceiver {

    //interface
    private static ISmsListener mListener;

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle data = intent.getExtras();

        Object[] pdus = (Object[]) data.get("pdus");

        for (int i = 0; i < pdus.length; i++) {
            SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);

            String sender = smsMessage.getDisplayOriginatingAddress();
            //Check the sender to filter messages which we require to read

            String messageBody = smsMessage.getMessageBody();
            if (messageBody.contains("payment")) {
                mListener.messageReceived(messageBody);
            }
        }
    }

    public static void bindListener(ISmsListener listener) {
        mListener = listener;
    }
}

В классе входа

// smsReceiver
SmsReceiver.bindListener(messageText -> {
    // If your OTP is six digits number, you may use the below code
    Pattern pattern = Pattern.compile(OTP_REGEX);
    Matcher matcher = pattern.matcher(messageText);
    String otp = null;
    while (matcher.find()) {
        otp = matcher.group();
    }
    codeNumberEdt.setText(otp);
    try {
        //set time in mili
        Thread.sleep(3000);
    } catch (Exception e) {
        e.printStackTrace();
    }
    LoginRegisterPresenter.callCheckCode(mobile, otp);
});

1 Ответ

0 голосов
/ 15 сентября 2018

Я посмотрел ваш код и ваша проблема будет решена. Вы можете использовать этот код в Login Class

private void enableSmsReceiver(){
    ComponentName receiver = new ComponentName(this, SmsReceiver.class);
        PackageManager pm = this.getPackageManager();

        pm.setComponentEnabledSetting(receiver,
                        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
                        PackageManager.DONT_KILL_APP);
}
private void disableSmsReceiver() {
    ComponentName receiver = new ComponentName(this, SmsReceiver.class);
    PackageManager pm = this.getPackageManager();

    pm.setComponentEnabledSetting(receiver,
            PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
            PackageManager.DONT_KILL_APP);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...