获取可读形式的android代码中的IP地址

获取可读形式的android代码中的IP地址,android,ip,Android,Ip,我是android开发的新手,我正在做一个应用程序,通过短信将android设备的IP地址发送给另一个设备。我需要以十进制形式获取IP,比如192.168.0.4,而不是从下面的代码中获取的十六进制。你知道怎么做吗?谢谢你的帮助 public String getLocalIpAddress() { try { for (Enumeration<NetworkInterface> en = NetworkInterface.ge

我是android开发的新手,我正在做一个应用程序,通过短信将android设备的IP地址发送给另一个设备。我需要以十进制形式获取IP,比如192.168.0.4,而不是从下面的代码中获取的十六进制。你知道怎么做吗?谢谢你的帮助

    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;
    } 
说明如何获取设备的IP

上述文章中的这段代码应该以正确的方式为您提供IP地址:

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

可以使用getprop命令从shell获取此信息

这样可以吗?仅当可用时,此函数才会以xxx.xxx.xxx.xxx模式返回ipv4


请注意,您提到的十六进制值应该是ipv6地址

虽然hungr的答案是正确的,但我发现如果我循环特定设备wlan0的ip_地址,例如,第一个地址是ipv6,第二个地址是ipv4。我只是返回第一个值,这就是为什么我只得到一个十六进制字符串

for (InetAddress inetAddress : Collections.list(inetAddresses)) {
                String ip_address = inetAddress.getHostAddress();
                Log.d(APP_NAME, "IP: " + ip_address);
                //return if_name + ": " + ip_address;
}

请注意,我注释掉了返回值

我得到的IP是奇怪的十六进制形式或其他形式,我需要它是192.168.0.0或类似的形式。请帮助。我不知道如何准确地做到这一点,但如果您遵循我共享的链接,这似乎是一个相当短的教程,它解释了如何以正确的方式获取设备的IP,以便以您要求的形式获取。我知道,现在回复有点晚,但这可能会帮助其他人。您可以使用以下条件:如果!inetAddress.isLoopbackAddress&&inetAddress实例用于筛选出结果。这应该只提供格式良好的IPv4地址。
for (InetAddress inetAddress : Collections.list(inetAddresses)) {
                String ip_address = inetAddress.getHostAddress();
                Log.d(APP_NAME, "IP: " + ip_address);
                //return if_name + ": " + ip_address;
}