如何以编程方式获取Android移动的IP地址....?

kri*_*nan 5 android

我想要通过wifi连接到网络的Android设备的确切IP地址!什么人可以帮助我如何获得移动连接到网络时的IP地址以及如何通过编程方式获取地址..在此输入图像描述

Moh*_*ANE 12

我用过这个,它工作了!

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
Run Code Online (Sandbox Code Playgroud)

清单文件中的权限低于.

<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"/>
Run Code Online (Sandbox Code Playgroud)


ran*_*dam 11

您可以使用此方法获取设备的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 "";
}
Run Code Online (Sandbox Code Playgroud)

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

  • 但它返回它找到的第一个地址,对于 ipv4,它很好,因为只有一个,但对于基于 ipv6 的地址有多个,所以我如何确保它返回的第一个地址是正确的 ipv6 地址 (2认同)