如何在两者都启用时使用数据连接而不是WIFI?

时间:2015-09-06 03:01:27

标签: android mobile wifi gprs

启用了wifi和数据连接。 由于我需要使用移动数据向移动运营商发送http请求以获取电话号码,但Android将使用wifi作为先前,所以我如何使用数据连接而不是WIFI?

当我在设备中启用wifi和移动数据时。我使用getAllNetworks()方法,但它总是返回wifi。我不知道为什么当我启用wifi和移动数据时,getAllNetworks只返回wifi?

当我启用移动数据时,getAllNetworks()会返回移动数据信息。

ConnectivityManager connectivityManager = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
Network[] network = connectivityManager.getAllNetworks();
if(network != null && network.length >0 ){
     for(int i = 0 ; i < network.length ; i++){
          NetworkInfo networkInfo = connectivityManager.getNetworkInfo(network[i]);
          int networkType = networkInfo.getType();
          if(ConnectivityManager.TYPE_MOBILE == networkType ){
               connectivityManager.bindProcessToNetwork(network[i]);
          }
     }
}

当启用wifi和数据连接时,是否有人知道如何使用数据连接而不是WIFI?

2 个答案:

答案 0 :(得分:13)

我也是这样做的,实际上只有在使用Android Lollipop时才能使用数据连接而不是WIFI。

似乎您正在尝试将Android Lollipop与目标API 23一起使用,因为您使用了bindProcessToNetwork而不是setProcessDefaultNetwork。

Android Lollipop允许多网络连接。

ConnectivityManager cm;
    cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkRequest.Builder req = new NetworkRequest.Builder();
    req.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
    req.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
    cm.requestNetwork(req.build(), new ConnectivityManager.NetworkCallback() {
        @Override
        public void onAvailable(Network network) {
              //here you can use bindProcessToNetwork
        }

    });

我也在寻找这个,所以我希望这有用!

答案 1 :(得分:0)

在此处查找详细的4.4减去设计和棒棒糖以及设计。

Send request over Mobile data when WIFI is ON.(Android L)