接続状態の特定と監視

繰り返しアラームとバックグラウンド サービスの最も一般的な使用には、インターネット リソースからのアプリケーション データの定期的なアップデートのスケジュール、データのキャッシュ、または長時間にわたるダウンロードの実行があります。ただし、インターネットに接続されていない場合や接続が遅すぎてダウンロードを完了できない場合、端末を起動してアップデートをスケジュールする必要はありません。

ConnectivityManager を使用して、インターネットに実際に接続されているか、接続されている場合はどのようなタイプの接続かを確認できます。

インターネット接続されているかどうかを確認する

インターネットに接続されていない場合、インターネット リソースに基づいてアップデートをスケジュールする必要はありません。 次のスニペットは、ConnectivityManager を使用してアクティブなネットワークを照会し、それがインターネットに接続されているかどうかを特定する例を示しています。

ConnectivityManager cm =
        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
                      activeNetwork.isConnectedOrConnecting();

インターネット接続のタイプを特定する

現在使用可能なインターネット接続のタイプを特定することもできます。

端末の接続は、モバイルデータ、WiMAX、Wi-Fi、およびイーサネット接続によって提供されます。次に示すように、アクティブなネットワークのタイプを照会することによって、使用可能な帯域幅に基づいてリフレッシュ レートを変更できます。

boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;

モバイルデータのコストは Wi-Fi よりも大幅に高い傾向にあるため、ほとんどの場合、モバイル接続ではアプリのアップデート レートを下げる必要があります。 同様に、大きいサイズのダウンロードは Wi-Fi 接続を使用できるようになるまで保留する必要があります。

アップデートを無効にした場合は、インターネット接続が確立されたらアップデートを再開するために、接続の変化をリッスンすることが重要です。

接続の変化を監視する

ConnectivityManager は、接続の詳細が変化すると CONNECTIVITY_ACTION"android.net.conn.CONNECTIVITY_CHANGE")アクションをブロードキャストします。ブロードキャスト レシーバーをマニフェストに登録してこれらの変化をリッスンし、変化に応じてバックグラウンド アップデートを再開(または保留)できます。

<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>

デバイスの接続は頻繁に変化する可能性があります。このブロードキャストは、モバイルデータと Wi-Fi が切り替わるたびにトリガーされます。 そのため、アップデートまたはダウンロードを以前に保留している場合にのみ、それらを再開するためにこのブロードキャストを監視することをお勧めします。通常はアップデートを開始する前にインターネット接続を確認するだけで十分であり、接続がない場合は接続が復旧するまでその後のアップデートを保留します。

この手法ではマニフェストで宣言したブロードキャスト レシーバーを切り替える必要があり、これについては次のレッスンで説明します。