2012-03-24 2 views
0

나는 안드로이드 4.0.3에 문제가있다. 아래의 방법을 사용하여 로컬 IP를 얻고 있습니다 :안드로이드 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에서 훌륭하게 작동합니다. 하지만 안드로이드 4.0.3 에뮬레이터에서 그것은 맥 주소와 같은 것을 반환합니다 : fe80 :: fad0 : bdff : fe4d : 4871 아무도 무슨 일이 일어 났는지 설명 할 수 있습니까?

+4

(!이 inetAddress.isLoopbackAddress() &&! isIPV6 (InetAddress를)) –

+1

확인의

if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)) { 
Calvin

+0

어떻게 할 수있는 경우 IPv4로 변환합니까? – Nolesh

답변

3

만 IPv4 주소를 얻을 변경하려면

if (!inetAddress.isLoopbackAddress()) { 

의 IPv6 주소
+1

호환되지 않는 조건부 피연산자 유형 InetAddress 및 Inet4Address – sajattack

0

getAllByName을 사용하는 것이 더 나을 것 같습니다.

앞서 언급했듯이 주소는 IPv6 주소 &입니다. IPv6 주소를 IPv4 주소로 변환 할 수 없습니다.

관련 문제