私のアプリではオフライン キャッシングを行っており、ユーザーがインターネットに接続したときに実行されるオフライン タスクをスケジュールしたいと考えてい ます。そのための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 と比べて大きな違いがあります。
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へのバックポート