0

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

Большинство ответов включает в себя передачу 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); 

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

ответ

0

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

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 
} 
0

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

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

, принять иначе посмотреть здесь Writing backwards compatible Android code.

+0

Но радиовещательный приемник будет жив только во время экземпляра процесса, он выиграл Не статично, как если бы объявлено в AndroidManifest.xml – htafoya

Смежные вопросы