getHostAddress () возвращает обратный ip-адрес

Я пытаюсь получить свой ip-адрес мобильного телефона с помощью классов WifiManager и WifiInfo.

он возвращает правильный IP-адрес восстанавливается.

public String getWifiIpAddress() {
    WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
    WifiInfo wi = wm.getConnectionInfo();

    byte[] ipAddress = BigInteger.valueOf(wi.getIpAddress()).toByteArray();
    try {
        InetAddress myAddr = InetAddress.getByAddress(ipAddress);
        String hostAddr = myAddr.getHostAddress();
        return hostAddr;
    } catch (UnknownHostException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return "";
}

результат : 73.0.168.192

1 ответов


хорошо, я только что видел, что ваш адрес перевернут! :)

это называется Большой / маленький выпуск endian, подробнее о Endianness который должен знать для всех программистов, особенно при выполнении интеграции приложений и миграции в разных операционных системах.

добавьте это после получения информации о подключении из диспетчера Wifi.

int ipAddress = wi.getIpAddress();

ipAddress = (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) ? 
                Integer.reverseBytes(ipAddress) : ipAddress;

затем продолжите свой код с помощью toByteArray и getHostAddress и т. д.