我开始编写一个 Android 应用程序来执行我的网络服务器的后台监控。启用 WiFi 后,默认情况下流量会定向到 WiFi,我想始终对 HTTP 请求使用 3G 来检查外部可用性。我知道我可以使用此代码以编程方式禁用 WiFi:
WifiManager wifiManager = (WifiManager)getBaseContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);
但由于它将在后台运行,因此有点笨拙,并且会在检查过程中中断通过 WiFi 进行的其他操作。看着 Socket Documentation我看不到任何明显的方法来实现这一点。我想知道是否有任何支持的方法可以在非 root 电话上实现此目的?我可以完全控制服务器,因此协议(protocol)不必特别是 HTTP。
最佳答案
这似乎是 Android 允许的一个非常危险的功能。
使用按流量计费的 3G 套餐的用户呢?如果某个应用程序强制他们使用 3G 连接,然后出现窃听或其他问题,在他们甚至不知情的情况下耗尽了他们的全部数据配额(以为他们在使用 WiFi),他们会有什么感觉?
此外,一次不能有多个 Activity 网络。
可能的解决方案-
您可以做的是在您的应用程序处于 Activity 状态时强制禁用 wifi 网络,然后再启用它。
此外,尝试搜索名为
requestRouteToHost
的方法。它允许您指定网络类型和要查找路由的主机。
关于Android 在启用 WiFi 时强制流量通过互联网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14229227/