首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android应用返回的设备IP地址与手机不同

Android应用返回的设备IP地址与手机不同
EN

Stack Overflow用户
提问于 2019-07-03 14:58:50
回答 1查看 52关注 0票数 1

Android应用返回的移动IP地址与手机设置中显示的不同。

我尝试使用以下示例代码读取从移动网络分配给只连接到移动网络的Android手机(运行Android 7)的IP。Android应用程序返回10.130.151.51,但从手机菜单中找到的IP地址是49.130.28.201。

有人知道为什么吗?我怎样才能得到正确的答案?

代码语言:javascript
复制
public String Get_Mobile_IP(){
    try {
        for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkinterfaces();
             en.hasMoreElements();) {
            NetworkInterface networkinterface = en.nextElement();
            for (Enumeration<InetAddress> en_IP = networkinterface.getInetAddresses(); en__IP.hasMoreElements();) {
                InetAddress mobile_IPaddr = en_IP.nextElement();
                if (!mobile_IPaddr.isLoopbackAddress() && mobile_IPaddr instanceof Inet4Address) {
                    return mobileIPAddr.getHostAddress();
                }

            }
        }
    } catch (Exception ex) {

    }
    return null;
}
EN

回答 1

Stack Overflow用户

发布于 2019-07-03 15:46:32

您可以尝试以下代码:-您可以使用此方法获取设备的IP地址,对于IPv4传递true,对于IPv6传递false

代码语言:javascript
复制
 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 "";

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56864571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档