获取移动网络的IP地址

时间:2020-01-26 10:07:38

标签: android

您好,我正在使用这种方法来获取移动网络IP地址

public static String getMobileIPAddress() {
    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()) {
                    return  addr.getHostAddress();
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions

    return "";
}

但是返回值似乎不是IP:fe80 :: dc19:94ff:fe6f:ae7b%dummy0

2 个答案:

答案 0 :(得分:1)

实际上,您的代码是正确的。它正在获取InetAddresses的列表,其中 ip地址还带有 mac地址。您必须使用InetAddressUtils.isIPv4Addressaddr instanceof Inet4Address API> = 23 )在其中过滤 ip地址。检查以下内容:

public static String getMobileIPAddress() {
    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() && 
                    addr instanceof Inet4Address) {
                    return  addr.getHostAddress();
                }
            }
        }
    } catch (Exception ex) { } // for now eat exceptions
    return "";
}

答案 1 :(得分:0)

此代码获取WIFI IP地址:

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