簡體   English   中英

創建沒有3G連接的android AVD

[英]Create android AVD without 3G connection

我的應用程序中的功能之一是通過Internet發送數據。 在嘗試發送數據之前,我檢查是否存在連接:

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

這在模擬器和我測試過的幾個真實設備上都可以正常工作。 然后,我從客戶端收到了一個錯誤報告,經調查發現該錯誤報告是TYPE_MOBILE getState行上的NullPointerException

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

因此,我感興趣的是創建一個明確沒有3G的AVD(即,僅WiFi設備的AVD),以便我可以研究/測試這種情況。 我沒有在仿真器選項中找到任何東西,但是也許我只是在錯誤的地方尋找。 這有可能嗎?

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

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

  • Linux / Mac: 〜/ .android / avd / yourAvdName

  • Windows Vista / 7 /(8?): C:\\ Users \\ .android \\ yourAvdName

  • Windows XP: C:\\ Documents and Settings \\ .android \\ yourAvdName

只需添加一行內容:

hw.gsmModem=no

有關更多詳細信息,請參見此處此處


但是,您可以通過關閉3G來測試它,方法是在仿真器中按F8鍵 我不知道這是否可以模擬您要查找的null,但是值得一試。

有關更多快捷方式,請參見此處

我不認為有一個簡單的解決方案。 同時,我采用了我的代碼,如下所示:

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值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM