NetworkType.UNMETERED против NetworkType.METERED - PeriodicWork - PullRequest
0 голосов
/ 12 сентября 2018

В моем приложении я использую менеджер работ для периодической работы. Я загружаю файлы на сервер. У меня есть одна кнопка при нажатии этой кнопки, появляется одно диалоговое окно и спрашивает пользователя - какую сеть вы хотите использовать при загрузке файла - 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 отдельные задачи для загрузки файла. Любое предложение будет оценено. Заранее спасибо

1 Ответ

0 голосов
/ 26 мая 2019

Если все, что вас волнует, это наличие сетевого подключения, просто используйте NetworkType.CONNECTED.Если файл очень большой и может стоить пользователю (так как в итоге он будет использовать дорогостоящее соединение для передачи данных), вы должны использовать NetworkType.UNMETERED.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...