Когда приложение находится в фоновом режиме, как мы можем обнаружить, что пользователь отключился от Wi-Fi?
Как всем известно, после Android 7.0 наши BroadcastsReceveirs больше не запускаются при отправке широковещательного намерения CONNECTIVITY_ACTION. Зарегистрировать BroadcastReceiver вручную/программно невозможно, так как мое приложение работает в фоновом режиме.
Я попытался запланировать JobService, который хорошо работает, когда пользователь переходит в сеть Wi-Fi (требование NETWORK_TYPE_UNMETERED), но не работает, когда пользователь выходит из WiFi прямо в состояние с интернета нет вообще. Например, если у пользователя НЕТ SIM-карты.
JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(new JobInfo.Builder(JOB_ID,
new ComponentName(this, NoInternetJobService.class))
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_METERED)
.build());
В приведенном выше примере мой JobService будет запущен, если пользователь выскочит из WiFi и подключится к ИЗМЕРЕННОМУ соединению (SIM-карта с включенными данными).
Некоторые из вас могут сказать, используйте JobInfo.NETWORK_TYPE_NONE для сетевых требований, но это просто значение по умолчанию для запланированного задания. Я в основном говорю jobScheduler, чтобы он не смотрел параметры сети для запуска моей работы, потому что мне вообще не нужен интернет. Таким образом, он будет выполнен в тот момент, когда я запланирую его, поскольку у меня нет других требований.
Какие-нибудь мысли? Я начинаю думать, что это невозможно сделать в Nougat или выше.