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 と比べて大きな違いがあります。

On Lollipop ジョブはバッチ処理され、すべてのアプリに対して一度にスケジュールされます。ただし、ライブラリは他のアプリ データにアクセスできないため、ライブラリを使用して 2 つの異なるアプリからのジョブを結合することはできません。

試してみたいもう 1 つのオプションは、AlarmManager API です。この API はジョブのスケジューリングに使用できますが、1 つの違いは、AlarmManager にはジョブを実行するタイミング以外の制約がないことです。

KitKat 以降、AlarmManager API は、「正確な」メソッドでスケジュールされていない場合でもジョブをバッチ処理します。KitKat ジョブがバッチ処理される前。

目標がデータの同期である場合は、Sync-Adapter API が役立つ可能性があります: Sync-Adapter

参照: AlarmManager

Android Lollipop の JobScheduler の api 10+ JobSchedulerCompatへのバックポート

于 2015-03-12T07:31:21.443 に答える