В моем случае, пользователи входят в систему с номером телефона, и я использую SmsReceiver
, чтобы получить otp и аутентифицировать их. проблема в SmsReceiver
не останавливается, и когда пользователи находятся на другой странице и случайно получает другое смс и принадлежит моему приложению, приложение закрывается.
Я знаю, почему происходит,
- нет кода для получения otp в классе
- 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);
});