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

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


person htafoya    schedule 08.03.2016    source источник


Ответы (2)


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

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

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

person Marvin    schedule 08.03.2016
comment
Но этот широковещательный приемник будет активен только во время экземпляра процесса, он не будет статичным, как если бы он был объявлен в AndroidManifest.xml. - person htafoya; 08.03.2016

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

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
}
person htafoya    schedule 08.03.2016