我的应用程序使用HttpURLConnection
连接到我的REST服务。我记录错误,并注意到偶尔会发生的是用户获得WiFi连接,但它有代理。
例如,那些机场wifi会重定向您支付页面,然后让您使用互联网。我的代码不遵循重定向。
我真正想要的是忽略WiFi的存在并强制通过3G / 4G / E进行通信。我怎么能在Android上做到这一点?
答案 0 :(得分:8)
一旦检测到代理,就会弹出一个对话框,告诉用户您的应用无法使用该网络,因此您将切换到移动网络。您可以使用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: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
如果您无法显示对话框,请至少发送状态栏Notification
,以便用户稍后了解网络切换。
答案 1 :(得分:1)
在您的活动中,每当您尝试拨打Web服务时
如果已启用WIFI,则禁用WIFI 。互联网上将有许多代码片段用于like this
现在还检查移动数据网络是否可用,如果可用,请拨打电话,否则向用户显示此应用将要求移动数据网络执行任务的对话框。
一旦您完成HTTP呼叫再次打开WIFI 。