从Android应用返回的移动IP地址与手机设置中显示的移动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;
}
您可以尝试此代码: - 您可以使用此方法获得IPv4设备通过的IP地址,而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 "";
}