在Android上连接WIFI后如何通过移动网络保持连接?

我注意到,当通过3G(移动)连接从远程服务器传输音频时,当WIFI断开或关闭时,只要WIFI被激活并连接,就会丢弃通过3G的连接。

即使现在连接了WIFI,我也希望应用继续使用3G。 我想这样做是为了保持连续性。 (用户可以选择加入/退出此行为)。

有没有特殊的旗帜,锁等。为此目的?

这在Android 5.0(Lollipop)之前的设备上是不可能的。 操作系统一次只保留一个接口,应用程序无法控制此选择。

在运行Android 5.0或更高版本的设备上,您可以使用新的多网络API来选择要用于网络流量的接口。

以下是从Android 5.0更新日志中执行此操作的步骤:

要从您的应用动态选择并连接到网络,请按以下步骤操作:

  1. 创建ConnectivityManager
  2. 使用NetworkRequest.Builder类创建NetworkRequest对象,并指定您的应用感兴趣的网络function和传输types。
  3. 要扫描合适的网络,请调用requestNetwork()registerNetworkCallback() ,并传入NetworkRequest对象和ConnectivityManager.NetworkCallback的实现。 如果要在检测到网络后主动切换到合适的网络,请使用requestNetwork()方法; 要在不主动切换的情况下仅接收已扫描网络的通知,请改用registerNetworkCallback()方法。

当系统检测到合适的网络时,它会连接到网络并调用onAvailable()回调。 您可以使用回调中的Network对象获取有关网络的其他信息,或引导流量以使用所选网络。

具体来说,如果您想通过3G / LTE强制通信,即使存在WiFi信号,您也可以使用以下内容:

 ConnectivityManager cm = (ConnectivityManager) context.getSystemService( Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder req = new NetworkRequest.Builder(); req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { // If you want to use a raw socket... network.bindSocket(...); // Or if you want a managed URL connection... URLConnection conn = network.openConnection(...); } // Be sure to override other options in NetworkCallback() too... }