调度用户连接到Internet时要执行的脱机任务

时间:2015-03-12 07:16:45

标签: android caching android-jobscheduler

在我的应用程序中,我正在进行离线缓存,我想安排在用户连接到互联网时执行的离线任务。我找到了JobScheduler API,但它只支持API级别21.是否有任何替代方案API小于21的JobScheduler可以帮助我安排用户连接到互联网时要执行的任务吗?

3 个答案:

答案 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

的后退