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

fra*_*ish 5 android connectivity android-networking android-wifi

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

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

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

Tre*_*hns 14

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

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

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

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

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

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

具体来说,如果您想通过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...

}
Run Code Online (Sandbox Code Playgroud)