Я разрабатываю приложение, которое должно запускать задание при потере соединения WiFi. Я легко могу определить, когда устройство получает WiFi-соединение, с помощью WorkManager, но я не нашел способа настроить Worker на работу только с сотовыми данными, который я установил бы сразу после обнаружения подключения пользователя к сети WiFi.
То, как я это делал, использовало BroadcastReceivers, которые сообщали мне, когда пользователь подключался или отключался от сети WiFi.
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<receiver android:name=".NetworkChangeReceiver">
<intent-filter>
<action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE"/>
</intent-filter>
</receiver>
К сожалению, в API 28 SUPPLICANT_CONNECTION_CHANGE_ACTION устарело.
К счастью, в API 28 теперь я могу использовать JobScheduler для достижения аналогичного эффекта, настраивая работу следующим образом:
val jobBuilder = JobInfo.Builder(jobId, ComponentName(context, NetworkService::class.java))
val requiredNetwork = NetworkRequest.Builder().addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR).build()
jobBuilder.setRequiredNetwork(requiredNetwork)
Я знаю, что могу объединить два решения и использовать одно или другое в соответствии с API устройства, но я бы хотел этого избежать. Я посмотрел на WorkManager, но не нашел способ запустить Worker только при работе с данными Cellular. Я что-то упустил или это в настоящее время невозможно с WorkManagers?