The Android Developer Challenge is back! Submit your idea before December 2.

接続ステータスの特定と監視

反復アラームとバックグラウンド サービスの用途のうち代表的なものとしては、インターネット リソースからアプリのデータを定期的に更新するためのスケジュール設定や、データのキャッシュへの格納、長時間に及ぶダウンロードの実行などがあります。しかし、インターネットに接続されていないときや、接続が遅すぎてダウンロードを完了できない場合に、デバイスを起動してアップデートをスケジュールするのは面倒です。

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

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

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

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val activeNetwork: NetworkInfo? = cm.activeNetworkInfo
    val isConnected: Boolean = activeNetwork?.isConnectedOrConnecting == true
    

Java

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

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

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

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

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

Kotlin

    val isWiFi: Boolean = activeNetwork?.type == ConnectivityManager.TYPE_WIFI
    

Java

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

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

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

接続の変更の監視

Android 7.0(API レベル 24)以降を対象としたアプリは、マニフェストでブロードキャスト レシーバを宣言していても、CONNECTIVITY_ACTION ブロードキャストを受信しません。アプリが BroadcastReceiverContext.registerReceiver() を登録し、コンテキストがまだ有効である場合、アプリは引き続き CONNECTIVITY_ACTION ブロードキャストを受信します。