ネットワークの情報を取得する
ネットワーク関連の情報は、ConnectivityManager の getActiveNetworkInfo() メソッドで取得できる 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 で以下のように宣言しておきます。
<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
}