2011-11-23 180 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地址進行服務調用。

相關問題