Приемник для подключения к Wi-Fi на Зефир и выше - PullRequest
0 голосов
/ 14 мая 2018

У меня есть приложение, которое должно знать, когда пользователь подключается к определенной сети Wi-Fi.Эта беспроводная сеть может предоставлять или не предоставлять пользователю доступ в Интернет.

При таргетинге на Android v25 и ниже мы можем просто использовать BroadcastReceiver, который намеренно фильтрует для android.net.wifi.STATE_CHANGE в манифесте.С v26, однако, это больше не так, кажется. Документация гласит :

Начиная с Android 8.0 (уровень API 26), система накладывает дополнительные ограничения на получателей, объявленных в манифесте.Если ваше приложение предназначено для уровня API 26 или выше, вы не можете использовать манифест для объявления получателя для большинства неявных широковещательных рассылок (широковещательных рассылок, которые не ориентированы конкретно на ваше приложение).Вы по-прежнему можете использовать зарегистрированный в контексте приемник [sic], когда пользователь активно использует ваше приложение.

Кроме того, Google требует, чтобы представления приложений были нацелены на последний уровень API.Итак, похоже, что мы должны зарегистрировать широковещательный приемник с действительным Context.

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

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать JobScheduler для достижения этой цели.Запланируйте задание следующим образом:

  JobScheduler js =
      (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
  JobInfo job = new JobInfo.Builder(
    MY_BACKGROUND_JOB,
    new ComponentName(context, MyJobService.class))
      .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
      .build();
  js.schedule(job);

И выполните операцию на вашем JobService, когда ОС запускает его.Пошаговое руководство по достижению доступно здесь

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