Android系统中可以提供Internet能力的网络类型有移动网络,WIFI网络,及有线Ethernet。
当Android上层APP访问网络时,如果APP没有明确请求网络的具体类型,通常会走手机默认网络类型。如果APP对某些特定网络比较依赖,比如MMS期望总是使用移动网络。
如下,当手机默认网络是WIFI时,三方APP也可以使用ConnectivityManager.requestNetwork API传入CELLULAR网络参数,这时移动网络如果已经断开,接着会重连并回调结果给ConnectivityManager。
private NetworkCallbackImpl mNetworkCallback;
private ConnectivityManager mCm = null;
private void init() {
mCm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
mNetworkCallback = new NetworkCallbackImpl();
}
private void requestCellNetwork() {
try {
mCm.requestNetwork(
new NetworkRequest.Builder()
.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
.build(),
mNetworkCallback);
} catch (Exception ex) {
Log.e(TAG, "requestNetwork failed, " + ex);
}
}
三方APP可以通过监听网络变化,或主动调用ConnectivityManager.getAllNetworks获取到移动网络的Network对象。
class NetworkCallbackImpl extends ConnectivityManager.NetworkCallback {
@Override
public void onAvailable(Network network) {
super.onAvailable(network);
Log