В моем приложении я использую менеджер работ для периодической работы. Я загружаю файлы на сервер. У меня есть одна кнопка при нажатии этой кнопки, появляется одно диалоговое окно и спрашивает пользователя - какую сеть вы хотите использовать при загрузке файла - 1. Wifi 2. Любой
Если пользователь нажимает на Wi-Fi, я загружаю файл через каждые 30 минут, Если пользователь нажимает на Любой, я загружаю файл через каждые 1 час.
Ниже приведен мой код для этого:
1. Если пользователь выбирает WIFI
PeriodicWorkRequest.Builder wifiWorkBuilder =
new PeriodicWorkRequest.Builder(FileUpload.class, 30,
TimeUnit.MINUTES)
.addTag("WIFIJOB1")
.setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.UNMETERED).build());
wifiWork = wifiWorkBuilder.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("wifiJob", ExistingPeriodicWorkPolicy.REPLACE, wifiWork);
Если пользователь выбрал любой:
PeriodicWorkRequest.Builder mobileDataWorkBuilder =
new PeriodicWorkRequest.Builder(FileUpload.class, 1,
TimeUnit.HOURS)
.addTag("MOBILEDATAJOB1")
.setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.CONNECTED).build());
mobileDataWork = mobileDataWorkBuilder.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("mobileDataJob", ExistingPeriodicWorkPolicy.REPLACE, mobileDataWork);
Для любой сети он работает отлично и загружает apk через каждые 1 час. Но если пользователь выберет Wifi, то вот проблема -
Если пользователь подключен к Wi-Fi другого мобильного устройства (скажем, он использует точку доступа), то здесь я полагаю, что сеть считается замеренной сетью, поэтому она не будет загружать файл. Я просто хочу знать, что наши домашние или офисные сети по умолчанию являются неизмеренными сетями или нет. Если предположить, что это не исправлено (означает, что некоторые измерены, а некоторые нет), то используя этот код, если пользователь выбирает wifi и пользовательский wifi считается измеренным, то из его файла устройства никогда не будет загружено.
Или я должен создать другую задачу, такую как:
PeriodicWorkRequest.Builder meteredwifiWorkBuilder =
new PeriodicWorkRequest.Builder(FileUpload.class, 45,
TimeUnit.MINUTES)
.addTag("METEREDWIFIJOB")
.setConstraints(new Constraints.Builder().setRequiredNetworkType(NetworkType.METERED).build());
wifiWork = wifiWorkBuilder.build();
WorkManager.getInstance().enqueueUniquePeriodicWork("meteredwifiJob", ExistingPeriodicWorkPolicy.REPLACE, wifiWork);
Таким образом, если пользователь, не подключенный к файлу wifi, будет загружаться через каждые 1 час, если подключенный к wifi (неизмеренный) файл будет загружаться через каждые 30 минут, а если он подключен к измеренному wifi, то файл будет загружаться через каждые 45 минут.
Выше логики имеет смысл создать 3 отдельные задачи для загрузки файла. Любое предложение будет оценено. Заранее спасибо