Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Android - обнаружение доступности WIFI в сочетании с JobScheduler

Автор вопроса: htafoyaОтветов: 2

Я хочу определить, когда устройство подключено к WIFI, чтобы вызвать локальное уведомление.

Большинство ответов включают прослушивание BroadcastReceiver для wifi.STATE_CHANGE. Однако кто-то заметил, что, поскольку Android 5.0 JobScheduler предлагает более эффективный способ сделать это:

JobInfo uploadTask = new JobInfo.Builder(mJobId,
                                         mServiceComponent /* JobService component */)
        .setRequiredNetworkCapabilities(JobInfo.NetworkType.UNMETERED)
        .build();
JobScheduler jobScheduler =
        (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(uploadTask);

Мое приложение по-прежнему поддерживает 4.1, поэтому я не уверен, можно ли добавить JobScheduler для версий 5.0+ и оставить статический широковещательный приемник в манифесте только для более низких версий.

androidwifiandroid-wifiandroid-jobscheduler

Ответы

Ответ 1 · Marvin

Маленький API-переключатель,

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
   //broadcast receiver
}else{
   //scheduler
}

, в противном случае посмотрите здесь Запись обратно совместимого кода Android.

Ответ 2 · htafoya

Вы можете отключить статические широковещательные приемники, выполнив следующие действия:

ComponentName receiver = new ComponentName(context, myReceiver.class);
PackageManager pm = context.getPackageManager();

pm.setComponentEnabledSetting(receiver,
  PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
  PackageManager.DONT_KILL_APP);

Итак, вы можете проверить, когда это необходимо:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
   //broadcast receiver
}else{
   //scheduler
}

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы