Android 4.0.3 получает локальный IP - PullRequest
0 голосов
/ 24 марта 2012

У меня проблема с 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 Кто-нибудь может объяснить, что случилось?

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Чтобы получить только IPv4-адрес, измените

if (!inetAddress.isLoopbackAddress()) {

на

if (!inetAddress.isLoopbackAddress() && (inetAddress instanceof Inet4Address)) {
0 голосов
/ 24 марта 2012

Вам может быть лучше использовать getAllByName.

Как я уже говорил, получаемый вами адрес является адресом IPv6, и вы не можете преобразовать адрес IPv6 в адрес IPv4.

...