2013-03-07 81 views
2

我的應用程序中的一個功能通過互聯網發送數據。嘗試發送數據之前,我檢查連接是否存在:創建沒有3G連接的android AVD

private boolean isConnected() { 
    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo.State val1 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState(); 
    NetworkInfo.State val2 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState(); 
    return NetworkInfo.State.CONNECTED.equals(val1) || NetworkInfo.State.CONNECTED.equals(val2); 
} 

這工作完全正常的仿真器和一對夫婦的實際設備的測試我的。然後我收到了客戶的錯誤報告,調查結果是NullPointerException,在getState線上,對於TYPE_MOBILE

顯然,在沒有3G(僅限WiFi的平板電腦)的設備上,connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)返回了null。儘管我在Nexus 7仿真器上進行了測試,但沒有收到此錯誤。

因此,我感興趣的是創建一個明確沒有3G的AVD(即僅支持WiFi的設備的AVD),以便我可以調查/測試這些場景。我在模擬器選項中沒有找到任何東西,但也許我只是在錯誤的地方尋找。這甚至有可能嗎?

回答

1

我不相信有一個簡單的解決方案。在此同時,我通過我的代碼看起來像這樣:

private boolean isConnected(Context context) { 
    ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo info1 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 
    NetworkInfo info2 = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo.State val1 = (info1 == null ? null : info1.getState()); 
    NetworkInfo.State val2 = (info2 == null ? null : info2.getState()); 
    return (info1 != null && NetworkInfo.State.CONNECTED.equals(val1)) || (info2 != null && NetworkInfo.State.CONNECTED.equals(val2)); 
} 

這需要照顧null值時的界面不存在。

3

您應該能夠更改AVD的硬件設置以移除調制解調器。該選項標記爲hw.gsmModem,但我相信它會禁用所有「單元數據」連接,而不僅僅是GSM。

如果您想在不使用AVD管理器的情況下更改硬件選件,請編輯在avd文件夾中找到的config.ini文件。默認情況下,該文件夾位於:

  • 的Linux/Mac的:〜/ .android/AVD/yourAvdName

  • 的Windows Vista/7 /(8): C:\用戶\ .android \ yourAvdName

  • Windows XP中: C:\ Documents和Settings \ .android \ yourAvdName

只需添加一條線,說:

hw.gsmModem=no 

更多細節見herehere


但是,您可以通過關閉3G,而不是通過在模擬器中按F8 測試它。我不知道這是否會模擬你正在尋找的零位,但它值得一試。

請參閱here瞭解更多快捷方式。

+0

我試圖關閉3G數據 - 這模擬關閉手機中的3G數據 - 並且連接信息不爲空,而是其getState返回DISCONNECTED。顯然這不是我所追求的。 – 2013-03-07 15:45:00

+0

我什至不能找到去除hw的地方。GSMMODEM。最新版本的ADV經理不會給我這些選項。我想,我可以尋找avd的xml,但禁用所有單元格數據對我來說不是一種選擇。我想我只會添加檢查空值。 – 2013-03-11 10:46:41

+0

我還沒有更新過AVD管理器,但您不需要通過任何方式更改選項。按說明編輯。 – Geobits 2013-03-11 12:40:41