Android開発でIPアドレス取得するには
「NetworkInterface.getNetworkInterfaces()」を使えばOK
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
マニフェストでINTERNETを追記しないと「NetworkInterface.getNetworkInterfaces()」がすべてnullとなってしまうので注意
IPAddress.kt
/**
* IPアドレス取得メソッド
*/
class IPAddress {
fun getIPAddress():String{
var text = "";
try{
val interfaces = NetworkInterface.getNetworkInterfaces();
if(interfaces == null){
text += "IPアドレス取得できませんでした。" + System.lineSeparator()
return text;
}
while(interfaces.hasMoreElements()){
val network = interfaces.nextElement()
val addresses = network.inetAddresses
while(addresses.hasMoreElements()){
val address = addresses.nextElement()
text += address.hostAddress + System.lineSeparator()
}
}
}catch (e : SocketException){
e.printStackTrace()
}
return text;
}
}
INTERNETが許可されない場合、「NetworkInterface.getNetworkInterfaces()」がnullとなってしまうので、その場合の処理を追加したほうがよさげ。
上記はIPアドレスはIPv4とIPv6が入り乱れて取得するので別途振り分け処理は必要かも
ループバックアドレス、近傍ローカルIPアドレス(IPv6)も同様に取得する。
19行目は「address.toString()」で取得も可能だが、なぜかエスケープ文字がも入ってしまうため、「address.hostAddress」のほうが無難かも