2015-01-13 3 views
0

WiFi 관리자를 통해 라우터 IP 주소를 가져 오려고 할 때 동일한 IP 주소를 가져올 수 없습니다. 아래는 코드 스 니펫입니다.dhcp.ipAddress가 0을 반환합니다.

WifiManager wifiMgr = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
DhcpInfo dhcp = wifiMgr.getDhcpInfo(); 
System.out.println("ip add - " + dhcp.ipAddress + "gateway add -" + dhcp.gateway); 

IP 추가 및 게이트웨이 추가는 항상 0을 반환합니다. 나는 어디에서든지 잘못 가고있다 ??? 끝내야 할 여분의 것이 있습니까?

많은 관련 스택 오버 플로우 관련 질문을 이미 마쳤지 만 답변이 없습니다. 친절하게 질문을 마치십시오. 친절한 신속한 답변이 도움이 될 것입니다. 추가 정보가 필요하면 알려주세요.

+0

DHCP 정보를 받기 전에 Wi-Fi 네트워크를 사용할 수 있는지 확인하고 있습니까? wifi가 비활성화되면 dhcp 정보는 0을 반환합니다. –

+0

안녕하세요. 알바로 말이 맞습니다. 전에 확인하지 않았습니다. 실제로이 문제는 타이밍 문제와 관련이 있습니다. wifiMgr.enableNetwrok()를 사용하여 네트워크를 사용하도록 설정하고 있지만 작업이 완료 될 때까지 기다리지 않고 그 전에 DHCP 정보 만 검색하고 있습니다. 이제 지연이 추가되고 작동 중입니다. –

+0

이제 IP 주소를 얻었지만 점선 형식으로 변환하는 동안 역 IP가됩니다. 정수 IP를 문자열 IP로 변환하는 동안 엔디안 문제를 처리하는 방법은 무엇입니까? –

답변

0

RemoteException이 발생하면 null을 반환합니다. 매니페스트 파일에서 인터넷 사용 권한이 부족한 것일 수 있습니다.

+0

null을 반환하지 않습니다. 0을 반환합니다. –

0

모든 와이파이 네트워크를 사용할 경우 확인해야 첫째, 그렇지 않은 경우 DhcpInfo.ipAdress 반환 0

당신이 점선 형식으로 변환 할 경우 (유효한 IPv4 주소 인 경우),이 시도 :

try { 
    WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE); 
    int ipAddress = wm.getDhcpInfo().ipAddress; 
    byte[] ipAddressbyte = BigInteger.valueOf(ipAddress).toByteArray(); 
    for (int i = 0; i < ipAddressbyte.length/2; i++) { 
     int temp = ipAddressbyte[i]; 
     ipAddressbyte[i] = ipAddressbyte[ipAddressbyte.length - i - 1]; 
     ipAddressbyte[ipAddressbyte.length - i - 1] = (byte) temp; 
    } 

    InetAddress myaddr = InetAddress.getByAddress(ipAddressbyte); 
    String hostaddr = myaddr.getHostAddress(); // numeric representation (such as "127.0.0.1") 
    Log.d("INET",hostaddr); 
} 
catch (Exception exc) { 
    Log.d("Exception", exc.getMessage()); 
} 
+0

하지만 항상 little endian 형식을 사용합니다. –

관련 문제