您好,我正在使用这种方法来获取移动网络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
答案 0 :(得分:1)
实际上,您的代码是正确的。它正在获取InetAddresses
的列表,其中 ip地址还带有 mac地址。您必须使用InetAddressUtils.isIPv4Address
或addr 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());