11

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

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

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

4

2 回答 2

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:如何使 HttpURLConnection 使用代理?

检测“网络变化”:

要了解如何检测“网络变化”,请参阅这篇文章: Android,如何在轮询数据时处理网络变化(从 GPRS 到 Wi-fi,反之亦然)

更新:

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

于 2012-06-22T16:00:20.567 回答
1

在您的活动中,每当您尝试调用您的 Web 服务时

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

现在还要检查移动数据网络是否可用,如果可用,请拨打您的电话,否则向用户显示一个对话框,该应用程序将需要移动数据网络来执行任务。

一旦你完成你的 HTTP 调用,再次打开 WIFI

于 2012-06-23T05:44:56.640 回答