我注意到,当通过3G(移动)连接从远程服务器传输音频时,当WIFI断开或关闭时,只要WIFI被激活并连接,就会断开通过3G的连接。
即使现在连接了WIFI,我也希望应用继续使用3G。我想这样做是为了保持连续性。 (用户可以选择加入/退出此行为)。
是否有特殊标志,锁定等。为此目的?
答案 0 :(得分:13)
这在Android 5.0(Lollipop)之前的设备上是不可能的。操作系统一次只保留一个接口,应用程序无法控制此选择。
在运行Android 5.0或更高版本的设备上,您可以使用新的多网络API来选择要用于网络流量的接口。
执行此操作的步骤要从您的应用中动态选择并连接到网络,请按以下步骤操作:
- 创建
ConnectivityManager
。- 使用
NetworkRequest.Builder
类创建NetworkRequest
对象,并指定您的应用感兴趣的网络功能和传输类型。- 要扫描合适的网络,请致电
醇>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...
}