接続のステータスと種類をモニタリングする

ConnectivityManager を使用すると、インターネット接続の有無と、接続がある場合はそのタイプを確認できます。

インターネット接続の有無を確認する

インターネット接続がない場合、インターネット リソースに基づいたアップデートを実行できません。インターネット接続を必要とするタスクをスケジュールするには、WorkManager の使用をおすすめします。詳しくは、WorkManager でタスクをスケジュールするをご覧ください。次のスニペットに示すメソッドを使用して、アクティブなネットワークに対して、インターネット接続の有無をその場で確認することもできます。

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();
    

注: getActiveNetworkInfo() のサポートは Android 10 で終了しました。Android 10(API レベル 29)以降をターゲットとするアプリでは、NetworkCallbacks を使用してください。

インターネット接続の種類を調べる

現在使用可能なインターネット接続の種類を調べることもできます。

デバイスの接続は、モバイルデータ接続、WiMAX 接続、Wi-Fi 接続、イーサネット接続によって提供されます。次のコードサンプルに示すようにアクティブなネットワークの種類を問い合わせることで、利用可能な帯域幅に基づいてアプリの動作を変更できます。

Kotlin

    val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
    val isMetered = cm.isActiveNetworkMetered()
    

Java

    ConnectivityManager cm =
            (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    boolean isMetered = cm.isActiveNetworkMetered();
    

注: アプリが Android 4.0(API レベル 15)以前をサポートする必要がある場合は、ConnectivityManager.isActiveNetworkMetered() の代わりに ConnectivityManagerCompat.isActiveNetworkMetered を使用してください。

モバイルデータの料金は、Wi-Fi やイーサネットよりも、かなり高い傾向があります。従量制の接続を使用しているときは、アプリのデータ使用量を減らすか、従量制でない接続になるまで待つ必要があります。