2012-03-24 62 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地址。