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

kat*_*tit 11 proxy android http

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

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

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

Ron*_*nie 8

切换到移动网络:

一旦检测到代理,就会弹出一个对话框,告诉用户您的应用无法使用该网络,因此您将切换到移动网络.您可以使用ConnectivityManager课程切换到移动网络.

ConnectivityManager cm; 
cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
Run Code Online (Sandbox Code Playgroud)

完成后切换回默认值:

cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);
Run Code Online (Sandbox Code Playgroud)

检测代理:

使用以下代码段检测代理

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.
}
Run Code Online (Sandbox Code Playgroud)

您可以查看此帖子以了解如何通过代理使用HttpURLConnection:如何使HttpURLConnection使用代理?

检测"网络变化":

要知道如何检测"网络变化",请参阅此文章: Android,如何在轮询数据时处理网络变化(从GPRS到Wi-fi,反之亦然)

更新:

如果您无法显示对话框,请至少发送一个状态栏,Notification以便用户稍后了解网络切换.