Приемник не работает, когда приложение убито - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть логи c, которые мне нужно выполнить, когда пользователь получает какое-либо SMS. Мой приемник Broadcast работает нормально, когда приложение работает, но если я убиваю его, то он не работает должным образом.

Может кто-нибудь помочь мне с этим? Я перепробовал все возможные подходы, которые присутствуют в Inte rnet, но все еще ничего не работает.

Заранее большое спасибо.

Мой класс приемника вещания:

public class EveryDay_SMSListener extends BroadcastReceiver {

    private SharedPreferences preferences;
    String msgBody ="";
    String msg_from;
    EveryDay_DataBase mydb;
    @Override
    public void onReceive(Context context, Intent intent) {

        Intent background = new Intent(context, EveryDay_Service.class);
        context.startService(background);
        if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){
            Bundle bundle = intent.getExtras();           
            SmsMessage[] msgs = null;
enter code here
            if (bundle != null){

                try{
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    msgs = new SmsMessage[pdus.length];
                    for(int i=0; i<msgs.length; i++){
                        msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
                        msgBody = msgBody+(msgs[i].getMessageBody()).toString();
                        msg_from = msgs[i].getOriginatingAddress();
                    }

                }catch(Exception e){
                }
            }
        }
    }

}

Ответы [ 2 ]

1 голос
/ 17 апреля 2020

В последних версиях Android система не запускает приложение, когда приложение не работает, и широковещательная передача отправляется (для большинства флагов широковещания).

Для выполнения этой работы вам следует использовать Foreground Services, некоторые ссылки, которые могут помочь вам реализовать это:

  1. https://androidwave.com/foreground-service-android-example/
  2. https://medium.com/@ramkumarv3 / foreground-service-with -tification-channel- ac6697c8a6d1
  3. https://developer.android.com/guide/components/services

Будьте осторожны, некоторые производители даже закрывают эти службы для оптимизации батарей, такие как Huawei, Samsung, .... Поэтому вы должны добавить фирменные коды c, чтобы запретить пользователю оптимизацию батареи и автоматизировать c закрытие служб для вашего приложения.

0 голосов
/ 16 апреля 2020

Вы сказали, что регистрация получателя в манифесте не работает для вас, поэтому единственная оставшаяся опция:

  1. создать службу foreground и зарегистрировать получателя SMS в onCreate ее (НЕ регистрируйте получателя смс в манифесте).
  2. создайте jobscheduler, который запускает ваш сервис каждые (n) секунды

, это последнее решение, но если вам не повезет между уничтожением приложения и следующей работой jobscheduler вы можете потерять смс, поэтому вы можете захотеть сделать (n) достаточно маленьким.

Лучшее решение - иметь разрешение на чтение смс, и каждый раз, когда ваша деятельность начинается, читать все смс с android Входящие и посмотрите, не потеряли ли вы смс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...