如何通过编程获取安卓手机的IP地址....?

7

当安卓设备通过wifi连接到网络时,我希望得到其确切的IP地址! 有人可以帮我编写程序来获取移动设备连接到网络时的IP地址吗?

enter image description here
2个回答

17
您可以使用此方法获取设备的IP地址,将IPv4设置为true,将IPv6设置为false。
 public static String getIPAddress(boolean useIPv4) {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress();
                    //boolean isIPv4 = InetAddressUtils.isIPv4Address(sAddr);
                    boolean isIPv4 = sAddr.indexOf(':')<0;

                    if (useIPv4) {
                        if (isIPv4) 
                            return sAddr;
                    } else {
                        if (!isIPv4) {
                            int delim = sAddr.indexOf('%'); // drop ip6 zone suffix
                            return delim<0 ? sAddr.toUpperCase() : sAddr.substring(0, delim).toUpperCase();
                        }
                    }
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

感谢这个答案 如何获取设备的IP地址?


2
但它返回它找到的第一个地址,对于ipv4来说没问题,因为只有一个,但对于基于ipv6的地址,有多个,那么我如何确保它返回的第一个地址是正确的ipv6地址? - Sumit Kumar Saha

15

我使用了这个,它有效!

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());

清单文件中的权限如下。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

1
非常感谢你的回答,它起作用了...! - krishnan muthiah pillai
1
这是与重复帖子相同的答案。 - Pedro Oliveira
1
警告,此方法已被弃用,不支持IPv6地址。 - matdev
1
什么是获取IP地址的最新方法@matdev? - natsumiyu
这是我使用的方法 @natsumiyu: https://dev59.com/l2025IYBdhLWcg3wVkif#54417079 - matdev
formatIpAddress已经被弃用。 - ltvie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接