Поддерживать работу приемника вещания, когда активность и / или приложение закрыты? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть действие, где я могу нажать кнопку, чтобы запустить BroadcastReceiver, который прослушивает изменения соединения Wi-Fi.Теперь, когда активность отображается, или я покидаю приложение (нажмите кнопку «Домой»), а активность показывает, что приемник работает нормально.Однако, если я закончу действие или убью приложение в целом (то есть удалите его из списка недавних задач), получатель больше не будет работать.Структура моей деятельности, которая включает в себя приемник, выглядит следующим образом:

MainActivity.java

...

public class MainActivity extends AppCompatActivity {
...
    public BroadcastReceiver wifiStateReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
        ...
        }
    }
}

Я прочитал о Services и JobSchedulers и понялчто мне, вероятно, придется использовать один из них, чтобы мой приемник работал в любое время.Я просто не знаю, как это реализовать.Может кто-нибудь объяснить мне, как это сделать?Кроме того, стоит ли включать BroadcastReceiver в класс MainActivity или лучше определить его в отдельном классе?

Большое спасибо!

1 Ответ

0 голосов
/ 22 мая 2018

Вы создаете получателей, зарегистрированных в контексте, в соответствии с документами :

Получатели, зарегистрированные в контексте, получают широковещательные сообщения, пока их контекст регистрации действителен.Например, если вы регистрируетесь в контексте действия, вы получаете широковещательные сообщения до тех пор, пока действие не будет уничтожено.Если вы регистрируетесь в контексте приложения, вы получаете широковещательные сообщения, пока приложение работает.

Вы можете создать свой BR в отдельном файле и зарегистрировать его в файле манифеста, чтобы он вызывался приваш фильтр намерений соответствует:

<receiver android:name=".wifiStateReceiver"  android:exported="true">
    <intent-filter>
       <action android:name="android.net.wifi.STATE_CHANGE" />
    </intent-filter>
</receiver>

Когда фильтр намерений соответствует, будет вызван ваш метод onReceive в вашем BR.

public class wifiStateReceiver extends BroadcastReceiver {

   @Override
   public void onReceive(Context context, Intent intent) {
      //do some quick processing and call an activity
   }
}
...