Androidメモ: ネットワーク情報を取得する (ConnectivityManager, NetworkInfo)

ネットワークの情報を取得する

ネットワーク関連の情報は、ConnectivityManagergetActiveNetworkInfo() メソッドで取得できる NetworkInfo オブジェクトを使って参照できます。 NetworkInfo オブジェクトは以下のように取得します。

// import android.net.ConnectivityManager;
// import android.net.NetworkInfo;

ConnectivityManager manager =
        (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
if (manager == null) {
    return false;
}

NetworkInfo networkInfo = manager.getActiveNetworkInfo();
if (networkInfo == null) {
    return false;
}

NetworkInfo を取得するためには ACCESS_NETWORK_STATE パーミッションが必要なため、AndroidManifest.xml で以下のように宣言しておきます。

AndroidManifest.xml
<manifest ...>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    ...
</manifest>

ネットワークの情報を一覧表示する

NetworkInfo オブジェクトの toString() メソッドで、ネットワーク情報の文字列表現を取得できます。

System.out.println(networkInfo.toString());
出力結果(実際は一行)
NetworkInfo:
  type: ETHERNET[],
  state: CONNECTED/CONNECTED,
  reason: eth0 DHCP success,
  extra: (none),
  roaming: false,
  failover: false,
  isAvailable: false,
  iPaddress: 192.168.3.98

ネットワークに接続されているか調べる

Android デバイスがネットワークに接続されているかどうかは、NetworkInfo オブジェクトの isConnected() メソッドで調べることができます。

if (networkInfo.isConnected()) {
    // ネットワークに接続されている
}

下記のように getState() メソッドを使って調べることもできます。

if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {
    // ネットワークに接続されている
}

どのタイプのネットワークがアクティブになっているか調べる

現在アクティブになっているネットワークが、WiFi なのか、Ethernet なのか、モバイルデータ通信なのかなどを調べるには、NetworkInfo オブジェクトの getType() メソッドを使います。

NetworkInfo networkInfo = manager.getActiveNetworkInfo();

switch (networkInfo.getType()) {
case ConnectivityManager.TYPE_WIFI:
    // WiFi network
    break;
case ConnectivityManager.TYPE_ETHERNET:
    // Ethernet
    break;
default:
    // Unknown
    break;
}

次のように、タイプ名を文字列で取得することもできます。

String typeName = networkInfo.getTypeName();

戻り値として、"WIFI""ETHERNET" などの文字列が返されます。

IP アドレスを調べる

現在アクティブなネットワークの IP アドレスを調べるには、NetworkInfo オブジェクトの getIpAddress() メソッドを使います。

String ipAddr = networkInfo.getIpAddress();
if (ipAddr == null) {
    // No address
}