簡體   English   中英

強制HttpURLConnection使用移動網絡並回退到WiFi

[英]Force HttpURLConnection to use mobile network and fallback to WiFi

我的應用程序使用HttpURLConnection連接到我的REST服務。 我記錄錯誤,並注意到偶爾會發生的是用戶獲得WiFi連接,但它有代理。

例如,那些機場wifi會重定向您支付頁面,然后讓您使用互聯網。 我的代碼不遵循重定向。

我真正想要的是忽略WiFi的存在並強制通過3G / 4G / E進行通信。 我怎么能在Android上這樣做?

切換到移動網絡:

一旦檢測到代理,就會彈出一個對話框,告訴用戶您的應用無法使用該網絡,因此您將切換到移動網絡。 您可以使用ConnectivityManager類切換到移動網絡。

ConnectivityManager cm; 
cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);

完成后切換回默認值:

cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);

檢測代理:

使用以下代碼段檢測代理

HttpURLConnection conn;
...
if (conn.getResponseCode() == HTTP_PROXY_AUTH){
    // You got a '407: Proxy authentication required' response.
    // Set the networkPreference() here and retry when 
    // network connection changes to TYPE_MOBILE.
}

您可以查看此帖子以了解如何通過代理使用HttpURLConnection: 如何使HttpURLConnection使用代理?

檢測“網絡變化”:

要知道如何檢測“網絡變化”,請參閱此文章: Android,如何在輪詢數據時處理網絡變化(從GPRS到Wi-fi,反之亦然)

更新:

如果您無法顯示對話框,請至少發送狀態欄Notification以便用戶稍后了解網絡切換。

在您的活動中,每當您嘗試撥打Web服務時

如果已啟用,請禁用WIFI 互聯網上會有許多代碼片段, 就像這樣

現在還檢查移動數據網絡是否可用 ,如果可用,請撥打電話,否則向用戶顯示此應用程序將要求移動數據網絡執行任務的對話框。

一旦完成HTTP呼叫,請再次打開WIFI

暫無
暫無

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

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