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

时间:2015-04-23 22:10:07

标签: android android-wifi android-networking connectivity

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

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

是否有特殊标志,锁定等。为此目的?

1 个答案:

答案 0 :(得分:13)

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

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

以下是从Android 5.0 changelog

执行此操作的步骤
  

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

     
      
  1. 创建ConnectivityManager
  2.   
  3. 使用NetworkRequest.Builder类创建NetworkRequest对象,并指定您的应用感兴趣的网络功能和传输类型。
  4.   
  5. 要扫描合适的网络,请致电requestNetwork()registerNetworkCallback(),然后传递NetworkRequest对象和ConnectivityManager.NetworkCallback的实施方案。如果要在检测到网络后主动切换到合适的网络,请使用requestNetwork()方法;要在不主动切换的情况下仅接收已扫描网络的通知,请改用registerNetworkCallback()方法。
  6.         

    当系统检测到合适的网络时,它会连接到网络并调用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...

}