我可以在Android上同时打开Wi-Fi和蜂窝网络接口吗?

时间:2012-01-03 20:51:21

标签: android android-wifi

我正在开发一款可以在手机上运行的应用程序 将成为私人Wi-Fi网络上的一个电台。手机将是一个 站,而不是接入点,私人Wi-Fi网络没有 路线到互联网。我的应用程序需要与之通信 Internet上的服务器以及本地Wi-Fi网络上的设备, 所以它需要同时在两个网络上建立连接。 我一直试图弄清楚如何做到这一点。

我一直在尝试讨论中描述的技术 Google Android开发者小组名为“可以 Android 2.X同时连接到3G和Wifi数据网络吗?“但是 它运作不佳。我发现的是,当我启用时 通过呼叫蜂窝网络 ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE), 我在Wi-Fi网络上打开的任何插座都已关闭。我没有 尝试过,但我怀疑在套接字上会发生同样的事情 当我切换回Wi-Fi时,蜂窝网络。

另一个问题是, 这些呼叫在全球范围内运行,从而改变了网络设置 对于整个手机,而不仅仅是应用程序。切换网络 像这样设置全局会干扰任何其他应用程序 恰巧在手机上运行。即使我的申请退出后, 手机继续运行它设置的最后一个网络配置。

我正在寻找一种在蜂窝电话上打开连接的方法 数据和Wi-Fi网络同时进行,而不会干扰 手机上运行的其他应用程序。

1.有谁知道怎么做 这个?
2.有人知道这是否可能?

感谢您的帮助。

8 个答案:

答案 0 :(得分:1)

这个帖子Android: Force data to be sent over radio vs WiFi提到了两种可能解决问题的方法。

  1. 只要您希望应用使用特定连接,请设置网络偏好设置:

    ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
    
  2. 启用高优先级移动数据连接:

    connectivityManager.startUsingNetworkFeature(ConnectivityManager.TYPE_MOBILE, "enableHIPRI");
    
  3. 对于第二种方法,具体说明它适用于Android 2.2,不知道这是否适用于实际版本。但是据我所知,enableHIPRI或多或少是一个隐藏的网络设置,所以如果可能的话我更喜欢第一种方法。

答案 1 :(得分:1)

这其实很简单。您需要提交两个请求;一个用于 cellular 传输类型的网络和一个 wifi 传输类型的附加请求。然后,对于从这些请求返回的任何网络,您都可以根据需要使用它们(例如,仅使用从 wifi 请求返回的网络处理内部资源)。

以下是 Wi-Fi 的示例:

final NetworkRequest requestForWifi =
  new NetworkRequest.Builder()
  .addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
  .build();

final ConnectivityManager connectivityManager = (ConnectivityManager)
  context.getSystemService(Context.CONNECTIVITY_SERVICE);

final NetworkCallback networkCallbackWifi = new NetworkCallback() {
  @Override
  void onAvailable(Network network) {
      // Triggers when this network is available so you can bind to it.
  }

  @Override
  void onLost(Network network) {
      // Triggers when this network is lost.
  }
};

connectivityManager.requestNetwork(requestForWifi, networkCallbackWifi);

提交额外的蜂窝请求,但改为使用 TRANSPORT_CELLULAR 和文件/收听这两个请求。由于您将有两个针对 Wi-Fi 和蜂窝网络的活动请求,因此 Android 会保持这两个网络供您使用。

答案 2 :(得分:0)

如果没有root访问权限,应用程序就不会有太大影响。

使用Android API,你最多可以做的就是打开WiFi,希望设备切换到它并关闭WiFi以使设备切换到3G(如果它在那里,APN是正确的等等)。

其他任何事情都不能保证有效。例如。设置首选连接类型并不能保证设备将切换到该类型。

通常的行为是,一旦WiFi可用,设备将同时启用3G和WiFi短时间(3-5秒),然后关闭3G。一旦用户或您的应用关闭WiFi,并且设备尝试连接到互联网,它将在一段时间后打开3G。

从Android 2.3开始,您无法再禁用/启用3G。一个用于破坏/恢复APN设置以启用/禁用3G,但从4.0开始,您无法以编程方式更改APN设置。

答案 3 :(得分:0)

我认为一次只能提供一项服务。您可以使用WiFi,也可以使用Cellular 3G Data。两者都不能同时工作。

答案 4 :(得分:0)

3G和Wifi数据网络不能同时连接,但如果运营商支持和Android框架也为运营商改变,则可以同时连接3G和Wifi。 现在一些运营商已经有了这个功能,但有些运营商却没有。

答案 5 :(得分:0)

目前在Android应用中无法同时使用两个网络,但您可以在PC中执行此操作 从WIFI路由器连接一个,从LAN或USB Internet Stick连接一个 所以创建APp并在PC上使用。如果您不知道如何在PC上运行Android而不是谷歌。

答案 6 :(得分:0)

如果我没弄错的话,如果Wi-Fi和3G / 4G都可用,Wi-Fi将优先考虑。

只有当Wi-Fi不可用时,它才会切换到3G / 4G。当然,这两者都是同时开启的。

不使用私有wifi从而限制您的选择,您可以考虑使用面向VPN的互联网,以便设备将从3G / 4G连接到VPN,然后如果安全是您关注使用私有wifi,则随后访问数据,

VPN客户端内置于Android中,还有第三方客户端。

希望它有所帮助!

答案 7 :(得分:0)

您可能希望研究ad-hoc wifi网络。 它通过wifi连接到设备,即使机器人已经使用wifi上网(虽然不使用ip栈)。

不要将wifi(IEEE 802.11x)连接与互联网(IP)连接混淆。 IP可以在wifi,移动,以太网,DSL,dailup或归巢鸽上运行,但一次只能运行一个网络。

有关ad-hoc wifi网络的更多信息,请查看以下链接。

https://code.google.com/p/android-wifi-tether/

请注意,许多运营商禁止多播(共享)其IP连接。好的。