[英]Lollipop Bad WiFi connection and Fallback to Mobile Network, how to Detect?
[英]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.