在我的应用程序中,我正在进行离线缓存,我想安排在用户连接到互联网时执行的离线任务。我找到了JobScheduler API,但它只支持API级别21.是否有任何替代方案API小于21的JobScheduler可以帮助我安排用户连接到互联网时要执行的任务吗?
答案 0 :(得分:5)
您可以使用GcmNetworkManager,它符合您所描述的需求,here是一个可行的示例。它在内部使用JobScheduler 21以上,而在21以下它使用了一些Google专有权
答案 1 :(得分:2)
使广播接收器接收连接变化
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" />
答案 2 :(得分:0)
有几种方法可以运行&#34; jobs&#34;预棒棒糖。
如前所述,您可以使用JobSchedulerCompat库,但与默认的Lollipop API相比,这个库有很大的不同:
在Lollipop上,一次性对所有应用程序进行批处理和计划作业。但是,该库无法访问其他应用数据,因此无法使用该库组合来自两个不同应用的作业。
您可能想要尝试的另一个选项是AlarmManager API。此API可用于调度作业,但一个区别是AlarmManager没有除运行作业的时间之外的约束。
由于KitKat,AlarmManager API也会在没有使用&#34; exact&#34;方法。在KitKat作业未进行批处理之前。
如果您的目标是同步数据,那么Sync-Adapter API可能很有用:Sync-Adapter
参考文献:AlarmManager,
Android Lollipop的JobScheduler向api 10 + JobSchedulerCompat
的后退