Android 在启用 WiFi 时强制流量通过互联网

标签 android sockets

我开始编写一个 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/

相关文章:

java - 尝试从 InputStream 重复读取时发生空指针异常

c++ - 试图从 zeromq pollitem 获取套接字实例

java - HttpURLConnection.getInputStream() 抛出 SocketTimeoutException

android - ionic native 音频不适用于 android

java - 如何在android中获取物理键盘布局

java - 只允许我的 android 应用程序在 java 中执行端点 api

sockets - 为什么telnet仅在Enter上发送数据?

java - Android Studio 无法启动(JDK 而不是 JRE)

c# - 在每个方法中初始化一个新的套接字是一件好事吗?

c - fcntl() 和 F_GETFL : strange result