问题描述
除了一个例外,一切都可以正常工作。如果我们首先通过移动数据分配传输,那么一切都会正常进行,数据将通过移动网络传输。然后我选择了wifi数据,一切都还不错。但是,如果此后再次选择移动数据,那么传输已经通过wifi进行了,为什么呢?为什么在第一次启动时一切正常,当再次打开wifi时,数据通过wifi而不是通过移动通信传输?谁知道原因?先感谢您。下面的代码。
public void setTransportType(int transportType) {
connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (networkCallback != null) {
connectivityManager.unregisterNetworkCallback(networkCallback);
networkCallback = null;
}
NetworkRequest.Builder request = new NetworkRequest.Builder();
if (transportType == TRANSPORT_TYPE_WIFI) {
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
} else {
request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
}
networkCallback = new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
connectivityManager.bindProcesstoNetwork(null);
connectivityManager.bindProcesstoNetwork(network);
/*Operation after switching over*/
}
};
connectivityManager.requestNetwork(request.build(),networkCallback);
}
解决方法
这是因为您用以下线路将与Wifi网络的连接绑定了:
connectivityManager.bindProcessToNetwork(network);
要切换为使用移动数据时,需要重置绑定的网络:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
manager.bindProcessToNetwork(null);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ConnectivityManager.setProcessDefaultNetwork(null);
}