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

Android应用程序返回的设备IP地址与手机不同,android,mobile,ip-address,Android,Mobile,Ip Address,Android应用程序返回的移动IP地址与手机设置中显示的不同 我尝试使用以下示例代码来读取从移动网络分配到仅连接到移动网络的Android手机(运行Android 7)的IP。Android应用程序返回10.130.151.51,但从手机菜单中找到的IP地址是49.130.28.201 有人知道为什么我能得到正确的答案吗 public String Get_Mobile_IP(){ try { for (Enumeration<NetworkInterface&g

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

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

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

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;
}
公共字符串Get\u Mobile\u IP(){
试一试{
for(枚举en=NetworkInterface.getNetworkinterfaces();
en.hasMoreElements();){
NetworkInterface NetworkInterface=en.nextElement();
对于(枚举en_IP=networkinterface.getInetAddresses();en_IP.hasMoreElements();){
InetAddress mobile_IPaddr=en_IP.nextElement();
if(!mobile_IPaddr.isLoopbackAddress()&Inet4Address的mobile_IPaddr实例){
返回mobileIPAddr.getHostAddress();
}
}
}
}捕获(例外情况除外){
}
返回null;
}
您可以尝试以下代码:- 您可以使用此方法获取设备的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 "";
公共静态字符串getIPAddress(布尔值useIPv4){
试一试{
List interfaces=Collections.List(NetworkInterface.getNetworkInterfaces());
用于(网络接口intf:接口){
List addrs=Collections.List(intf.getInetAddresses());
用于(InetAddress地址:地址){
如果(!addr.isLoopbackAddress()){
字符串sAddr=addr.getHostAddress();
//布尔isIPv4=InetAddressUtils.isIPv4Address(SADD);
布尔isIPv4=sAddr.indexOf(':')您可以尝试以下代码:-
您可以使用此方法获取设备的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 "";
公共静态字符串getIPAddress(布尔值useIPv4){
试一试{
List interfaces=Collections.List(NetworkInterface.getNetworkInterfaces());
用于(网络接口intf:接口){
List addrs=Collections.List(intf.getInetAddresses());
用于(InetAddress地址:地址){
如果(!addr.isLoopbackAddress()){
字符串sAddr=addr.getHostAddress();
//布尔isIPv4=InetAddressUtils.isIPv4Address(SADD);

布尔isIPv4=sAddr.indexOf(“:”)我可以使用两种Android编码读取IP地址。我遇到的问题是,应用程序返回的值与手机菜单中显示的值不同。我发现我必须关闭“电压”在Android手机中,为了获得正确的结果,我可以使用两种Android编码读取IP地址。我遇到的问题是,应用程序返回的值与手机的手机菜单中显示的值不一样。我发现我必须关闭Android手机中的“VoLTE”才能获得正确的结果