I am new to android development and I am doing an application which sends the IP address of an android device to another one by sms. I need to get the IP in decimal like this 192.168.0.4 not in hexadecimal which I got from the below code. any idea how to do that and thanks for the help.
public String getLocalIpAddress()
{
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e(TAG, ex.toString());
}
return null;
}
public static String getLocalIpv4Address(){
try {
String ipv4;
List<NetworkInterface> nilist = Collections.list(NetworkInterface.getNetworkInterfaces());
if(nilist.size() > 0){
for (NetworkInterface ni: nilist){
List<InetAddress> ialist = Collections.list(ni.getInetAddresses());
if(ialist.size()>0){
for (InetAddress address: ialist){
if (!address.isLoopbackAddress() && InetAddressUtils.isIPv4Address(ipv4=address.getHostAddress())){
return ipv4;
}
}
}
}
}
} catch (SocketException ex) {
}
return "";
}
Should this be ok ? This function will return ipv4 (in xxx.xxx.xxx.xxx pattern) only if available.
Please note that those hexadecimal value you mentioned should be an ipv6 address.
This post explains how to get the IP of the device.
This bit of code (taken from the aforementioned post) should get you the IP address the correct way:
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e(LOG_TAG, ex.toString());
}
return null;
}
While hungr's answer is correct, I found that if I loop through the ip_addresses for a specific device "wlan0" for example, the first address is ipv6 and the second is ipv4. I was only returning the first value, which is why I was only getting a hex string.
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
String ip_address = inetAddress.getHostAddress();
Log.d(APP_NAME, "IP: " + ip_address);
//return if_name + ": " + ip_address;
}
Notice I commented out the "return"
This info is available from the shell, using getprop
command.