2011-11-23 177 views
4

我通过USB连接我的android设备,将其用作模拟器,如果我从eclipse emulator访问URL,如果我从设备作为仿真器进行访问,则会导致连接超时错误。http://10.0.2.2适用于Android模拟器,但不适用于作为模拟器使用的Android设备

有没有需要改变的设置?或者有没有可能的解决方案?

感谢

+0

Windows/Linux下或Android下的防火墙设置?此外,IP有点宽。 –

+0

@Joop你问我还是想看看特定的防火墙设置? – BreakHead

回答

2

你在这里做一个假设,即设备的行为喜欢的模拟器。这绝对是独立运行你的应用程序,而不是模拟或模拟。您必须将IP地址调整为您的计算机的IP地址,手机可以通过其网络,手机或Wifi查看IP地址。

+0

你的意思是代替使用10.0.2.2我必须使用localhost吗? – BreakHead

+0

[10.0.2.2](http://developer.android.com/guide/developing/devices/emulator.html#networkaddresses)绑定到主机的本地主机,而不是设备或模拟器。 –

+0

那么我怎么能做到这一点,你可以引导我吗?以便我可以从设备访问本地服务器上托管的网站? – BreakHead

5

这是我为了让设备在本地主机上运行的windows PC上获取本地服务实例而必须做的。

  • 在我的设备上打开WiFi并连接到无线网络。
  • 在命令提示符下运行ipconfig。
  • 使用我的以太网适配器本地连接的IPv4地址(因为我通过以太网连接)
  • 变化的Android应用程序的基本URL使用that address

然后我的Android应用程序能够通过该IP地址连接到本地服务实例,而不是10.0.2.2,这在您在模拟器上运行应用程序时起作用。如果有人这么倾向,你可以提取这些URL并检查应用程序是否在模拟器或设备上运行,然后在代码中正确设置IP地址。希望这可以帮助。

编辑对于上述网址提取 - 我创建了一个ApplicationName.java文件,并宣布该变量:

public static String ANDROID_DEVICE_ID = ""; 

然后设置变量在我最初的活动:

ApplicationName.ANDROID_DEVICE_ID = Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID); 

然后我复制粘贴该设备ID,并在我的api类,使Web服务调用我有以下代码:

private String getCategoriesUrl() { 
    // TODO: Remove before production 
    if (AgoraApplication.ANDROID_DEVICE_ID.equals("deviceIdString")) { 
     _categoriesUrl = _deviceIp + _categoriesUrlSuffix; 
    } 
    else { 
     _categoriesUrl = _emulatorIp + _categoriesUrlSuffix; 
    } 
    return _categoriesUrl; 
} 

因此,当我在任一设备或模拟器上进行调试时,我的应用程序会自动使用适当的IP地址进行服务调用。

相关问题