2012-03-24 28 views
0

我有Android 4.0.3的问题。我正在使用下面的方法获取本地IP:Android 4.0.3获取本地IP

public static String getLocalIpAddress() { 
try { 
    for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
     NetworkInterface intf = en.nextElement(); 
     for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
      InetAddress inetAddress = enumIpAddr.nextElement(); 
      if (!inetAddress.isLoopbackAddress()) { 
       return inetAddress.getHostAddress().toString(); 
      } 
     } 
    } 
} catch (SocketException ex) { 
    ex.printStackTrace(); 
} 
return null; 
} 

它在android v2.1-2.3上效果很好。但在模拟器与Android 4.0.3它返回类似mac-address:fe80 :: fad0:bdff:fe4d:4871任何人都可以解释发生了什么?

+4

这是一个IPv6地址 – 2012-03-24 08:03:11

+1

检查(!inetAddress.isLoopbackAddress()&&!isIPV6(InetAddress类)) – Calvin 2012-03-24 08:09:44

+0

怎样才能我将它转换为IPv4? – Nolesh 2012-03-24 08:43:25

回答

3

,仅保留IPv4地址,更改

if (!inetAddress.isLoopbackAddress()) { 

if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)) { 
+1

不兼容的条件操作数类型InetAddress和Inet4Address – sajattack 2012-08-30 00:02:28

0

您最好使用getAllByName

正如我所提到的,你得到的地址是一个IPv6地址&你不能将IPv6地址转换为IPv4地址。