【问题标题】:How to force the HTTP connection over Wi-Fi instead of cellular in Android?如何在 Android 中通过 Wi-Fi 而不是蜂窝网络强制 HTTP 连接?
【发布时间】:2011-07-07 12:07:15
【问题描述】:

我的应用程序必须检测到连接到 Wi-Fi 网络的设备是必需的,然后以编程方式通过该 Wi-Fi 网络触发 HTTP 请求。我已经搜索过,但我没有找到任何可以帮助我做到这一点的方法或类。

我曾想过禁用蜂窝网络,以便 HTTP 请求通过 Wi-Fi 网络,但即使这样我也没有成功。 另外,我可以通过编程方式启用和禁用蜂窝网络和 Wi-Fi 网络吗?

【问题讨论】:

  • 设备不会自动执行此操作吗?另一个问题是,你真的应该为用户决定他想使用哪个互联网连接吗?
  • 感谢您的回复,我知道您想说什么,但您清楚我需要什么。 (当我们进行http连接请求时,android框架将根据那里的可用性决定它应该从哪个网络通过。)但是我的所有应用程序要求只有http conn requets通过wifi而不是蜂窝。 appln 是 abt wifi 热点,比如当用户在“abc”wifi 网络位置时,然后启动应用程序通过“abc”wifi 网络通过 http 请求进行身份验证。然后在susscess之后允许用户使用“abc”wifi网络进行浏览。
  • 为什么不像大多数 wifi ISP 那样只处理所有服务器端呢?然后你得到的东西可以在任何设备上运行,不需要安装、跟踪 Android 版本等。
  • 嘿,克里斯,我同意你的看法……它的所有客户端要求,他们已经拥有与其他 wifi 热点提供商类似的服务器端实现,现在他们也希望拥有本机应用程序。

标签: android android-wifi httpconnection


【解决方案1】:

没有办法强制它使用其中一个。无论是 3G 还是 Wi-Fi(如果连接了 Wi-Fi,3G 关闭),都可以使用任何可用的网络。如果您不想根据当前使用的网络执行某些操作,您可以检查 Wi-Fi 是否未连接,如果是,请不要执行任何操作,并提示用户。如果启用了纬度,谷歌地图会做类似的事情。

WifiManager 类有很多可能对你有用的方法。

【讨论】:

  • 感谢 robby 的回复,好的,这是真的..如果 wifi 和蜂窝网络都可用,操作系统将只使用一个网络,但最高优先级是 wifi 或蜂窝网络,即 [将 wifi 开启(最高优先级)和蜂窝关闭] 或反之亦然。我如何确保请求仅来自 wifi。
  • @amsiddh 再次阅读我的答案。如果连接了 wifi,则唯一可用的数据连接是 wifi,3g 将处于非活动状态。
  • 嘿 robby 再次感谢您,将实现这一点,并将返回结果。
【解决方案2】:

您可以使用 Android 中 ConnectivityManager 类的 setNetworkPrefrence(ConnectivityManager.TYPE_WIFI)

【讨论】:

  • 请注意,应用程序需要 CHANGE_NETWORK_STATE 权限才能执行此操作。我稍微摆弄了一下,似乎调用(一旦生效)似乎会影响所有使用连接的应用程序,因此必须小心使用。我还发现这个调用不可靠(至少在我试过的 Nexus One 上)
  • setNetworkPrefrence(ConnectivityManager.TYPE_WIFI) 在 API 级别 21 中已弃用。查看更多:developer.android.com/reference/android/net/…
【解决方案3】:

您可以使用 OkHttp 和自定义的 SocketFactory。详情请见https://github.com/square/okhttp/issues/2404

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-12
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多