IP-адрес планшета Android - PullRequest
       7

IP-адрес планшета Android

0 голосов
/ 08 ноября 2011

Здесь я сталкиваюсь с проблемой получения IP-адреса планшета Android.

Я использую следующий код для адреса IP планшета в общем виде.

  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();
                }
            }
        }

inetAddress.getHostAddress () метод возвращает IP-адрес как fe80 :: 9a4b: 4aff: fe00: a6e1 , который отличается от 122.xx xxx.xxx формат.

Когда я использую класс Wifimanager для получения IP-адреса планшета, он возвращает 122.xx.xxx.xxx только в этом формате.

Но, используя общий способ, я не знаю, почему он дает неправильный формат.

Может кто-нибудь помочь мне в этом вопросе ...

Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 08 ноября 2011

Это адрес IPv6.Взгляните на статью в Википедии для начала.Может быть возможно преобразовать адрес IPv6 в адрес IPv4 (то есть xxx.xxx.xxx.xxx), но это не гарантируется.

0 голосов
/ 08 ноября 2011

/ * просмотрите доступные сетевые интерфейсы и выберите первый «приличный» адрес IPv4.* Так как по умолчанию эмулятор использует 10.0.2.15, используйте его только в том случае, если нет ничего лучше.* /

public String getMyIp() {
        Set<String> eligible = eligibleIpAddresses();

/* For the emulator, prefer an IP address other than 10.0.2.15 (default emulator address)
             * but use it if it is the only one. */
        if (eligible.size() > 1) {
            eligible.remove("10.0.2.15");
            return eligible.iterator().next();
        } else if (eligible.size() == 1) {
            return eligible.iterator().next();
        } else {
            Log.w("Using local IP address, no external objects will be discovered","---");
            return "127.0.0.1";
        }
    }

    public static Set<String> eligibleIpAddresses() {
        Set<String> eligible = new HashSet<String>();
        try {
            Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNetworkInterfaces();
            while (netInterfaces.hasMoreElements()) {
                NetworkInterface ni = netInterfaces.nextElement();
                Enumeration<InetAddress> address = ni.getInetAddresses();
                while (address.hasMoreElements()) {
                    InetAddress addr = address.nextElement();
                    if (!addr.isLoopbackAddress() && !(addr.getHostAddress().indexOf(":") > -1)) {
                        eligible.add(addr.getHostAddress());
                    }
                }
            }
        } catch (Exception e) {
        }
        return eligible;
    }
0 голосов
/ 08 ноября 2011

fe80::9a4b:4aff:fe00:a6e1 совсем не так. Это просто новый стиль, IPv6.

Новые приложения всегда должны быть рассчитаны на работу в обоих форматах.

...