在我的应用程序中,我正在进行离线缓存,我想安排离线任务在用户连接到互联网时执行。我找到 了 JobScheduler API,但它只支持 API 级别 21。对于低于 21 的 API,是否有任何替代 JobScheduler帮我安排用户连接到互联网时要执行的任务?
3 回答
您可以使用GcmNetworkManager,它符合您描述的需求,这是一个工作示例。它在 21 以上内部使用 JobScheduler,在 21 以下它使用一些 Google 专有技术
制作广播接收器以接收连接更改
public class NetworkChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
final ConnectivityManager connMgr = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
final android.net.NetworkInfo wifi = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
final android.net.NetworkInfo mobile = connMgr
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (wifi.isAvailable() || mobile.isAvailable()) {
// Do something
Log.d("Netowk Available ", "Flag No 1");
}
}
}
在您的清单中,添加权限
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
有几种方法可以在棒棒糖前运行“作业”。
如前所述,您可以使用 JobSchedulerCompat 库,但与默认的 Lollipop API 相比,这个库有很大的不同:
在 Lollipop 上,一次性为所有应用程序批处理和安排作业。但是,该库无法访问其他应用程序数据,因此无法使用该库组合来自两个不同应用程序的作业。
您可能想尝试的另一个选项是 AlarmManager API。此 API 可用于调度作业,但一个不同之处在于,AlarmManager 除了运行作业的时间之外没有其他限制。
由于 KitKat,AlarmManager API 也会在未使用“精确”方法计划时对作业进行批处理。在 KitKat 作业未批处理之前。
如果您的目标是同步数据,那么 Sync-Adapter API 可能会有用:Sync-Adapter
参考:AlarmManager,
Android Lollipop 的 JobScheduler 向后移植到 api 10+ JobSchedulerCompat