Getting IP address in a readable form android code

2019-03-05 09:17发布

问题:

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;
    } 

回答1:

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.



回答2:

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;
}


回答3:

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"



回答4:

This info is available from the shell, using getprop command.



标签: android ip