Android - 结合 JobScheduler 检测可用的 WIFI
Android - Detect WIFI available combined with 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,所以我不确定是否有任何方法可以为 5.0+ 版本添加 JobScheduler,而仅在较低版本的清单中保留静态广播接收器。
小 API-开关,
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
//broadcast receiver
}else{
//scheduler
}
,要不就看这里Writing backwards compatible Android code.
您可以通过以下方式禁用静态广播接收器:
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
}
我愿意检测设备何时连接到 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,所以我不确定是否有任何方法可以为 5.0+ 版本添加 JobScheduler,而仅在较低版本的清单中保留静态广播接收器。
小 API-开关,
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
//broadcast receiver
}else{
//scheduler
}
,要不就看这里Writing backwards compatible Android code.
您可以通过以下方式禁用静态广播接收器:
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
}