Как вызвать диспетчер работы при подключении wifi в android? - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть приложение, которое должно синхронизировать данные, как только интернет подключен к устройству.

У меня есть синхронизация в классе Worker, и она работает нормально.Но мне нужно запустить этот класс, как только интернет подключен к телефону.Поскольку приемник широковещательных сообщений об изменении соединения не рекомендуется и не рекомендуется использовать, мне нужен способ запустить мой класс при подключении к Интернету, чтобы данные синхронизировались.Как мне этого добиться?

Я также подумал о том, чтобы запланировать работу менеджера, когда у пользователя есть приложение, и поддерживать состояние подключения к Интернету, но когда приложение закрыто из-за недавнего времени, onDestroy не вызывается.У вас есть решение или логика для этого, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Мальчик понял твою точку зрения.То, что вы указали, совершенно правильно, что вы должны стараться избегать широковещательных приемников для такой ситуации, поскольку люди в наше время имеют большое количество приложений, и каждый запрос на запуск приложения после подключения к Интернету приведет к зависанию системы пользователя, поскольку каждое приложение хочет отправить запрос.после того, как Wi-Fi подключен.Таким образом, система Android поставляется с JET PACK, после чего вы не должны выполнять действие своего приложения, а запрашивать это действие для системы Android, и они будут обрабатывать фоновый запрос.

Как упоминалось выше, Саид работает с

Constraints constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build(); 
OneTimeWorkRequest onetimeJob = new OneTimeWorkRequest.Builder(YourJob.class)
                    .setConstraints(constraints).build(); // or PeriodicWorkRequest
WorkManager.getInstance().enqueue(onetimeJob);

Но подождите, вы хотите запустить работу, когда интернет подключен, поэтому вы хотите что-то вроде устаревшей трансляции для изменения соединения.Почему ты не делаешь одну вещь?Всякий раз, когда данные, которые вы получаете, когда пользователь находится на переднем или заднем плане, используют диспетчер работ.Если вы используете для него модификацию, то он возвращает ошибку, когда нет подключения к интернету, таким образом, вы можете запланировать работу, когда сбой происходит из-за сети.

Таким образом, ваша работа будет

  override fun onFailure(call: Call<Chat>, t: Throwable) {
                 Log.v("chatsyncchecking","sending message failed",t)

                 if(t is IOException){
                     Log.v("chatsyncchecking","scheduling chat sync")
                     (app as App).enqueueChatSync()
                 }
             }

(Вы можете выполнить каждый запрос из класса приложения)

Так что это дает вам преимущество, что вы не должны увольнять менеджера работы всякий раз, когдаИнтернет подключен.Просто ты стреляешь, когда какая-то задача проваливаетсяЭто делает меньше запросов работы для системы Android тоже.В конце концов, все мы - сообщество, которое помогает улучшить Android, и пользователи, имеющие большой опыт работы с телефоном, не сильно отстают.Надеюсь, это поможет

0 голосов
/ 29 сентября 2019

Из-за новых ограничений на Android O и выше, вы не можете запустить свой класс сразу после того, как сетевое соединение активируется с помощью флагов манифеста.Но вы можете указать Workmanager запустить вашу работу, как только будет доступно любое интернет-соединение.

Для этого вам нужно определить ограничение:

 Constraints constraints = new Constraints.Builder()
                    .setRequiredNetworkType(NetworkType.CONNECTED)
                    .build(); 

И затем поставить вашу работу в очередь.:

OneTimeWorkRequest onetimeJob = new OneTimeWorkRequest.Builder(YourJob.class)
                    .setConstraints(constraints).build(); // or PeriodicWorkRequest
WorkManager.getInstance().enqueue(onetimeJob);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...