2009-11-12 142 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

这对我的作品。我也在为网络应用程序工作。