Wie erhalte ich die IP-Adresse des Android Emulators?

75

Ich möchte die IP-Adresse des aktuell ausgeführten Android Emulators über Code abrufen. Wie kann es erreicht werden?

Rajapandian
quelle
1
Vielleicht hier und hier verwandt .
hhh
@hhh Zweiter Link ist defekt. :)
Muhamed Huseinbašić
1
@ MuhamedHuseinbašić Ich glaube, dieser Thread hat das Problem im zweiten Thread gelöst, also habe ich beschlossen, ihn zu löschen, um die Dinge einfach zu halten.
hhh

Antworten:

155

Zur Verdeutlichung: In Ihrer App können Sie den Emulator einfach als 'localhost' oder 127.0.0.1 bezeichnen.

Der Webdatenverkehr wird über Ihren Entwicklungscomputer geleitet, sodass die externe IP-Adresse des Emulators die IP-Adresse ist, die Ihr Computer diesem Computer zugewiesen hat. Die Entwicklungsmaschine ist immer unter Ihrem Gerät unter 10.0.2.2 erreichbar.

Was versuchen Sie zu tun, da Sie nur nach der IP des Emulators gefragt haben?

Matthias
quelle
8
Ich möchte Sie dafür 100 Mal positiv bewerten. Ich konnte nicht herausfinden, wie meine App mit einem anderen lokalen Server kommunizieren konnte, den ich ausgeführt hatte, bis ich Ihren Beitrag gelesen hatte. Vielen Dank!
Spike
Wie können Sie Ihre Entwicklungsmaschine ab 10.0.2.2 erreichen? Ich habe versucht zu pingen, aber nichts, Bild hier . Ifconfig -app rechts und Terminal-Emulator links versuchen, die Dev-Maschine zu pingen. Sie können in localhost nichts sehen, keine einfachen Tests?
hhh
@hhh Sie können JuiceSSH ausprobieren: play.google.com/store/apps/details?id=com.sonelli.juicessh Sie können Ihren Host über die angegebene IP- Adresse oder über die tatsächliche IP- Adresse des Hosts erreichen. Beide Varianten funktionieren bei mir.
Muhamed Huseinbašić
Ich glaube, der Datenverkehr von einem Emulator wird zuerst über einen "virtuellen" Router geleitet (mit der IP-Adresse von 10.0.2.1, nicht direkt. Es sollte also eine zusätzliche Verbindung zwischen diesem Router 10.0.2.1und dem Host / Dev-Computer stattfinden 127.0.0.1/10.0.2.2. Was ich normalerweise normalerweise ändere die Portnummer möchte ich verbinden.
stdout
36

Wenn Sie wirklich möchten, dass die IP Ihrem Emulator zugewiesen wird:

adb shell
ifconfig eth0

Welches gibt Ihnen so etwas wie:

eth0: ip 10.0.2.15 mask 255.255.255.0 flags [up broadcast running multicast]
Derek Shockey
quelle
Luise sagte: Ich habe die Derek-Methode ausprobiert. Es kann innerhalb der ADB-Shell pingen .
Tobi Nary
6
Ich bekomme diesen Fehler nach adb shell: ifconfig: eth0: No such deviceirgendwelche Ideen warum?
Awavi
3
@awavi es könnte unter einer anderen Schnittstelle sein wiewlan0
William Reed
26

So was:

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

Weitere Informationen finden Sie in den Dokumenten: NetworkInterface .

Marcin Gil
quelle
5
Und vergessen Sie nicht die Erlaubnis 'android.permission.INTERNET'
Stéphane
2
Dies gibt IP6-Adresse, wie IP4 zu bekommen?
Akash Kava
19

Mit dieser Methode erhalten Sie eine 100% korrekte IP-Adresse für Ihren Android-Emulator

Um die IP-Adresse Ihres Emulators zu erhalten

Gehen Sie zur ADB-Shell und geben Sie diesen Befehl ein

adb shell
ifconfig eth0

Geben Sie hier die Bildbeschreibung ein

Nachdem ich diesen Befehl ausgeführt habe, erhalte ich

IP: 10.0.2.15

Maske: 255.255.255.0

Welches funktioniert bei mir. Ich arbeite auch für eine Netzwerkanwendung.

Nikhil Agrawal
quelle
10

Wenn Sie auf den lokalen Host Ihres Host-Computers verweisen müssen, z. B. wenn der Emulator-Client einen Server kontaktieren soll, der auf demselben Host ausgeführt wird, verwenden Sie den Alias 10.0.2.2 , um auf die Loopback-Schnittstelle des Host-Computers zu verweisen. Aus der Sicht des Emulators bezieht sich localhost (127.0.0.1) auf seine eigene Loopback-Schnittstelle. Weitere Details: http://developer.android.com/guide/faq/commontasks.html#localhostalias

mahbub_siddique
quelle
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;
}
den
quelle
0

Innerhalb des Codes meiner App kann ich die IP-Adresse des laufenden Geräts einfach wie unten erhalten:

WifiManager wm = (WifiManager) getSystemService(WIFI_SERVICE);
String ip = Formatter.formatIpAddress(wm.getConnectionInfo().getIpAddress());
Blasanka
quelle