Обнаружение изменений подключения на Android 7.0 Нуга, когда приложение находится на переднем плане

Nougat изменил способ обработки CONNECTIVITY_CHANGED намерений (в основном игнорируя его, заставляя разработчиков использовать планировщик заданий), поэтому мне остается задаться вопросом:

Если у меня есть приложение, которое находится в середине получения некоторых данных (и я проверил, был ли телефон включен в то время, когда я сделал запрос, но пользователь находится в движении, и телефон подключается к другой точке доступа Wi-Fi, например ), И он не работает, как я могу обнаружить, что соединение было восстановлено, и я купирую попытку фетиширования данных?

Поэтому в этом случае мое приложение находится на переднем плане, я думаю, что Chrome (для android) имеет аналогичную функцию.

Нужно ли мне самому опросить его? Или есть какое-то событие, которое разрешено в то время?

Приложения, которые работают, все равно могут прослушивать CONNECTIVITY_CHANGE в своем основном потоке, если они запрашивают уведомление с помощью BroadcastReceiver.

https://developer.android.com/about/versions/nougat/android-7.0-changes.html

Хотя ответ Андромеды можно было использовать, это решение не предназначено для Google. Ваш вопрос заключался в том, что делать, когда соединение потеряно, и вам нужно возобновить работу, когда возвращается услуга сети.

В то время как CONNECTIVITY_CHANGE технически работает, он всегда был немного взломан для этой конкретной необходимости, и он перестанет работать в Нугате, как только ваше приложение зайдет в фоновом режиме. То, что вы действительно должны использовать, – это API планировщика заданий. Google предлагает нам множество вариантов с различными требованиями и функциями.

  1. JobScheduler

JobScheduler был добавлен в Lollipop и добавлен планировщик, который может ждать подключения к сети, чтобы запланировать работу. Он может даже зависеть от типа соединения, проверяя неконтролируемые или не роуминговые соединения. Этот вариант не имеет обратной совместимости, но работает без сервисов Google Play.

  1. Сетевой менеджер GCM

GcmNetworkManager – это прямой порт функции JobScheduler для версий до Lollipop, но для этого требуются сервисы Google Play.

  1. Диспетчер работы Firebase

Firebase JobDispatcher предоставляет другое средство для планирования заданий для версий до Lollipop, которое по умолчанию использует службы Google Play, но может быть настроено так, чтобы не требовать этой зависимости.

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

Вот более подробная информация о различных вариантах с примерами, представленными Google:

https://developer.android.com/topic/performance/scheduling.html https://developer.android.com/topic/performance/background-optimization.html#sched-jobs

В моем случае я подписался на трансляцию с фильтром CONNECTIVITY_CHANGE в Сервисе, и он работает.

Как сохранить сервис живым – это еще одна история 🙂