我的应用程序使用HttpURLConnection连接到我的REST服务.我记录错误,并注意到偶尔会发生什么是用户获取WiFi连接,但它有代理.
例如,那些机场无线网络会将您重定向到付费页面,然后让您使用互联网.我的代码不遵循重定向.
我真正想要的是忽略WiFi的存在,强制通过3G / 4G / E进行通信.如何在Android上执行此操作?
解决方法
切换到移动网络:
一旦您检测到代理,弹出一个对话框,告诉用户您的应用程序无法使用该网络,因此您正在切换到移动网络.您可以使用ConnectivityManagerclass切换到移动网络.
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通过代理:How do I make HttpURLConnection use a proxy?
检测“网络变化”:
要知道如何检测“网络变化”,请看这篇文章:
Android,How to handle change in network (from GPRS to Wi-fi and vice-versa) while polling for data
更新: