Примечание. Я использую Xiaomi Mi 11 для тестирования и знаю, что некоторые производители, в том числе Xiaomi реализовала массу ограничений относительно фоновых процессов. Я отключил ограничения заряда батареи, «Приостановить активность приложения, если оно не используется» и все ограничения отключить, которые смог найти.
Я читал, что начиная с Android 7 получатели регистрировались в манифест не всегда работает, и большинство неявных получателей работают только тогда, когда приложение находится на переднем плане (источник). К счастью, я обнаружил, что есть исключения, и Telephony.SMS_RECEIVED_ACTION является одним из них, как описано здесь и здесь. Однако он по-прежнему не работает, когда приложение закрыто, например, при перелистывании из раздела «Недавние» или принудительной остановке.
Манифест:
Код: Выделить всё
Код: Выделить всё
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.provider.Telephony;
import android.telephony.SmsMessage;
import android.util.Log;
import java.util.Objects;
public class SmsReceiver extends BroadcastReceiver {
public SmsReceiver() {}
@Override
public void onReceive(Context context, Intent intent) {
Log.d("qvkrimp", "dbg1"); // line only prints when in foreground
if (alertListener != null && Objects.equals(intent.getAction(), Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
StringBuilder sb = new StringBuilder();
for (SmsMessage message : smsMessages) {
sb.append(message.getMessageBody());
}
String sender = smsMessages[0].getOriginatingAddress();
String message = sb.toString();
// message has to start with "[QVKR ALERT]"
if (message.startsWith("[QVKR ALERT]")) {
Log.d("qvkrimp", "dbg2");
}
}
}
}
Я сделал что-то не так? Разве приемник не должен работать, если он описан как «исключение»? Или есть другой подход к надежному получателю SMS?
Спасибо за любую помощь!
Подробнее здесь: https://stackoverflow.com/questions/784 ... t-in-foreg
Мобильная версия