4

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

4

3 回答 3

5

您可以使用GcmNetworkManager,它符合您描述的需求,是一个工作示例。它在 21 以上内部使用 JobScheduler,在 21 以下它使用一些 Google 专有技术

于 2016-02-17T14:46:47.667 回答
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" />
于 2015-03-12T07:20:15.390 回答
0

有几种方法可以在棒棒糖前运行“作业”。

如前所述,您可以使用 JobSchedulerCompat 库,但与默认的 Lollipop API 相比,这个库有很大的不同:

在 Lollipop 上,一次性为所有应用程序批处理和安排作业。但是,该库无法访问其他应用程序数据,因此无法使用该库组合来自两个不同应用程序的作业。

您可能想尝试的另一个选项是 AlarmManager API。此 API 可用于调度作业,但一个不同之处在于,AlarmManager 除了运行作业的时间之外没有其他限制。

由于 KitKat,AlarmManager API 也会在未使用“精确”方法计划时对作业进行批处理。在 KitKat 作业未批处理之前。

如果您的目标是同步数据,那么 Sync-Adapter API 可能会有用:Sync-Adapter

参考:AlarmManager

Android Lollipop 的 JobScheduler 向后移植到 api 10+ JobSchedulerCompat

于 2015-03-12T07:31:21.443 回答