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

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

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

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

切换到移动networking:

只要您检测到一个代理,popup一个对话框告诉用户,您的应用程序不能使用该networking,因此您切换到移动networking。 您可以使用ConnectivityManager类切换到移动networking。

 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. } 

你可以检查这个post,知道如何通过代理使用HttpURLConnection: 如何让HttpURLConnection使用代理?

检测“networking更改”:

要知道如何检测“networking变化”,请看这篇文章: Android,如何处理networking中的变化(从GPRS到Wi-Fi,反之亦然),同时轮询数据

更新:

如果不能显示对话框,至less应发送状态栏Notification以便用户稍后知道networking切换。

在您的活动中,每当您尝试打电话给您的Web服务时

只要禁用WIFI,如果它启用 。 互联网上会有很多这样的代码片段

现在也检查,如果移动数据networking是否可用 ,并且如果可用请拨打您的电话,否则显示用户对话,该应用程序将需要移动数据networking来完成任务。

并且一旦完成HTTP呼叫,请再次打开WIFI