2012-02-03 11 views
5

Moja aplikacja wykorzystuje multicast wysłać sygnał nawigacyjny w okresach wraz z komunikatem i protokołu IP hosta dołączenie do grupy multicast. W urządzeniu z systemem Android wraca 127.0.0.1. Rozejrzałem się i okazało się, że wiele osób zasugerowało zmianę pliku hosta. Ale w przypadku Androida nie jest to możliwe w moim kontekście. Jak uzyskać prawdziwe IP urządzenia, a nie adresów sprzężenia zwrotnego ..InetAddress.getLocalHost(). GetHostAddress() zwraca 127.0.0.1 w Androidzie

private void getLocalAddress() 
{ 
    try { 
     String localHost = InetAddress.getLocalHost().getHostAddress(); 
     servers.add(localHost); 
    } catch (UnknownHostException e) { 
     e.printStackTrace(); 
    } 
} 
+1

na moim telefonie, chyba że jest uaktywniona Wi-Fi i są połączone z siecią Wi-Fi, to nie ma adresu IP. Jeśli nie ma lokalnego adresu, 'getLocalHost' zwraca adres sprzężenia zwrotnego, który otrzymujesz. –

+0

@JoachimPileborg wypróbuj moją odpowiedź. Mam nadzieję, że rozwiąże to problem. – himanshu

Odpowiedz

11

Zmodyfikowane kilka bitów i ten działa tak, jak na uzyskanie adresu IPv4. ! inetAddress.isLoopbackAddress() usuwa cały adres sprzężenia zwrotnego. ! inetAddress.isLinkLocalAddress() i inetAddress.isSiteLocalAddress()) usuwa wszystkie adresy IPv6. Mam nadzieję, że to pomoże komuś tutaj.

StringBuilder IFCONFIG=new StringBuilder(); 
    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() && !inetAddress.isLinkLocalAddress() && inetAddress.isSiteLocalAddress()) { 
       IFCONFIG.append(inetAddress.getHostAddress().toString()+"\n"); 
       } 

      } 
     } 
    } catch (SocketException ex) { 
     Log.e("LOG_TAG", ex.toString()); 
    } 
    servers.add(IFCONFIG.toString()); 
+0

Aby upewnić się, że nikt o tym nie zapomni, będziesz potrzebować uprawnienia INTERNET na swoim AndroidManifest.xml:

0

Spróbuj tego: -

String hostname = args[0]; 
try 
    { 
     InetAddress ipaddress = InetAddress.getByName(hostname); 
     System.out.println("IP address: " + ipaddress.getHostAddress()); 
    } 
    catch (UnknownHostException e) 
    { 
     System.out.println("Could not find IP address for: " + hostname); 
    } 
+0

kiedy moja aplikacja zostanie wysłana. Jak myślisz, czy będzie możliwe podanie nazwy hosta dla wszystkich użytkowników korzystających z aplikacji? Czy znasz jakiś inny sposób, aby go znaleźć? – Milan

0

od moich próbach, maksymalna mogę dostać to adres sieci WiFi.

Nie znam żadnego innego sposobu, niż faktycznie wywołanie serwera WWW, która zwraca adres IP. Oczywiście problem polega na tym, że używa danych telefonu.

Powiązane problemy