2009-11-12 19 views
57

Ich möchte die aktuelle Android Emulator IP-Adresse durch Code abrufen. Wie kann es erreicht werden?Wie bekomme ich die IP-Adresse des Android-Emulators?

+1

Vielleicht verwandt [hier] (http://stackoverflow.com/questions/7447221/how-to-connect-to-avd) und [hier] (http://stackoverflow.com/questions/13217796/is- android-avds-firewall-irgendwie-eingeschränkter-zu-real-android-firewall). – hhh

+0

@hhh Zweite Verbindung ist unterbrochen. :) –

+1

@ MuhamedHuseinbašić Ich fühle, dass dieser Thread das Problem im zweiten Thread gelöst, so beschlossen, es zu löschen, um die Dinge einfach zu halten. – hhh

Antwort

119

Nur um zu verdeutlichen: Innerhalb Ihrer App können Sie den Emulator einfach als 'localhost' oder 127.0.0.1 bezeichnen.

Der Web-Datenverkehr wird über Ihren Entwicklungscomputer geleitet. Die externe IP-Adresse des Emulators ist also die IP-Adresse, die Ihrem Provider von diesem IP zugewiesen wurde. Der Entwicklungscomputer ist immer von Ihrem Gerät aus unter 10.0.2.2 erreichbar.

Da Sie nur nach dem Emulator IP gefragt haben, was versuchen Sie zu tun?

+6

Ich möchte Sie dafür 100 mal aufwerten. Ich konnte nicht herausfinden, wie meine App mit einem anderen lokalen Server kommunizieren konnte, bis ich deinen Beitrag gelesen hatte. Vielen Dank! – Spike

+0

Wie erreichen Sie Ihren Entwicklungscomputer von 10.0.2.2? Ich habe versucht, aber nichts ping, pic [hier] (http://i.stack.imgur.com/Yjv7W.jpg). Ifconfig -app auf der rechten und Terminal-Emulator auf der linken Seite versucht, ping dev-machine. Kannst du in localhost keine einfachen Tests sehen? – hhh

+0

@hhh Sie können JuiceSSH versuchen: https://play.google.com/store/apps/details?id=com.sonelli.juicesssh Sie können Ihren Host von der erwähnten IP oder von der realen IP des Hosts erreichen. Beide Varianten funktionieren für mich. –

25

So:

public 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) { 
     Log.e(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 

Überprüfen Sie die Dokumentation für weitere Informationen: NetworkInterface.

+4

Und vergiss nicht die "android.permission.INTERNET" Erlaubnis –

+2

Das gibt IP6-Adresse, wie IP4 bekommen? –

3
public 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) { 
     Log.e(LOG_TAG, ex.toString()); 
    } 
    return null; 
} 
28

Wenn Sie wirklich wollen, die IP zu Ihrem Emulator zugewiesen:

adb shell 
ifconfig eth0 

Welche Sie so etwas wie geben:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast] 
+0

das war zu gut, aber diese Adresse ping nicht von meinem PC :( –

+0

[Luise] (https://Stackoverflow.com/users/6066443/louise) sagte: * Ich versuchte Derek-Methode.Es kann in AdB-Shell * ping. – SmokeDispenser

+0

Ich bekomme diesen Fehler nach 'adb shell':' ifconfig: eth0: Kein solches Gerät'eine Idee warum? – awavi

7

Wenn Sie benötigen, um Ihre Host-Computers localhost verweisen Wenn der Emulatorclient beispielsweise einen Server kontaktieren soll, der auf demselben Host ausgeführt wird, verwenden Sie den Alias ​​10.0.2.2, um auf die Loopbackschnittstelle des Hostcomputers zu verweisen. Aus der Sicht des Emulators, localhost (127.0.0.1) bezieht sich auf seine eigene Loopback interface.More Details: http://developer.android.com/guide/faq/commontasks.html#localhostalias

12

Mit dieser Methode können Sie 100% korrekte IP-Adresse für Ihr Android-Emulator

werden immer um die IP-Adresse des yoor Emulator

zum adb Shell und geben Sie folgenden Befehl

adb shell 
ifconfig eth0 

enter image description here

Nachdem Sie diesen Befehl ausführen Ich erhalte

IP: 10.0.2.15

Mask: 255.255.255.0

was für mich funktioniert. Ich arbeite auch für eine Netzwerkanwendung.

Verwandte Themen