强制HttpURLConnection使用移动网络并回退到WiFi

时间:2012-06-20 00:04:01

标签: android http proxy

我的应用程序使用HttpURLConnection连接到我的REST服务。我记录错误,并注意到偶尔会发生的是用户获得WiFi连接,但它有代理。

例如,那些机场wifi会重定向您支付页面,然后让您使用互联网。我的代码不遵循重定向。

我真正想要的是忽略WiFi的存在并强制通过3G / 4G / E进行通信。我怎么能在Android上做到这一点?

2 个答案:

答案 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