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 やイーサネットよりも、かなり高い傾向があります。従量制の接続を使用しているときは、アプリのデータ使用量を減らすか、従量制でない接続になるまで待つ必要があります。