2009-11-12 130 views
57

我想通過代碼獲取當前運行的Android Emulator的IP地址。 如何實現?如何獲取Android模擬器的IP地址?

+1

也許相關[這裏](http://stackoverflow.com/questions/7447221/how-to-connect-to-avd)和[這裏](http://stackoverflow.com/questions/13217796/is- Android的AVDS-防火牆不知何故,更被限制成實Android的防火牆)。 – hhh 2012-11-05 13:29:01

+0

@hhh第二個鏈接已損壞。 :) – 2015-04-17 14:57:30

+1

@MuhamedHuseinbašić我覺得這個線程解決了第二個線程中的問題,所以決定刪除它以保持簡單。 – hhh 2015-04-20 13:29:42

回答

119

只是爲了澄清:從您的應用程序內,您可以簡單地將模擬器引用爲'localhost'或127.0.0.1。

Web流量通過您的開發機器路由,因此模擬器的外部IP是由您的提供商分配給該機器的任何IP。開發機器總是可以從您的設備到達10.0.2.2。

由於您只詢問仿真器的IP,您要做什麼?

+6

我想爲此贊助100次。我無法弄清楚我的應用程序如何與我運行的另一臺本地服務器交談,直到我閱讀您的文章。謝謝! – Spike 2011-01-08 02:21:10

+0

如何從10.0.2.2到達開發機器?我嘗試了ping,但沒有,圖片[這裏](http://i.stack.imgur.com/Yjv7W.jpg)。 Ifconfig -app在左邊的終端仿真器上試圖ping開發機。在localhost中看不到任何簡單的測試? – hhh 2012-11-05 13:21:09

+0

@hhh您可以嘗試JuiceSSH:https://play.google.com/store/apps/details?id=com.sonelli.juicessh您可以通過提及的IP或主機的真實IP訪問您的主機。兩種變體都適用於我。 – 2015-04-17 15:11:33

25

像這樣:

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

檢查文檔獲取更多信息:NetworkInterface

+4

並且不要忘記'android.permission.INTERNET'權限 – 2011-03-10 14:28:11

+2

這給出IP6地址,如何獲取IP4? – 2015-08-17 08:48:51

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

如果你真正想要的IP分配給你的模擬器:

adb shell 
ifconfig eth0 

,這將給你是這樣的:

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

這太好了,但這個地址不是從我的電腦pinging :( – 2013-08-31 04:26:14

+0

[路易絲](https://stackoverflow.com/users/6066443/louise)說:*我試過德里克方法。它可以在adb shell *內ping。 – SmokeDispenser 2016-03-15 12:47:48

+0

'adb shell'後出現這個錯誤:'ifconfig:eth0:沒有這樣的設備'的一些想法爲什麼? – awavi 2017-06-09 18:58:46

7

如果您需要參考您的主機的本地主機例如,當您希望仿真器客戶端與運行在同一主機上的服務器聯繫時,請使用別名10.0.2.2來引用主機的回送接口。從仿真的角度來看,本地主機(127.0.0.1)指的是其自身的回送interface.More細節:http://developer.android.com/guide/faq/commontasks.html#localhostalias

12

使用此方法,你會爲你的Android模擬器會得到100%正確的IP地址

爲了得到yoor模擬器

轉到亞行殼的IP地址,然後輸入以下命令

adb shell 
ifconfig eth0 

enter image description here

運行此命令後我得到

IP:10.0.2.15

掩碼:255.255.255.0

這對我的作品。我也在爲網絡應用程序工作。