Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use data connection instead of WIFI when both are enabled?

Both wifi and data connection are enabled. Since I need to use mobile data to send a http request to mobile carrier to get phone number, But android will use wifi as prior, so How can I use data connection instead of WIFI?

When I enable the wifi and mobile data int the device. I use getAllNetworks() method, but it always returns wifi. I don't know Why getAllNetworks just return wifi when I enable both wifi and mobile data?

When I just enable the mobile data, the getAllNetworks() return mobile data info.

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]);
          }
     }
}

Does some one know how to use data connection instead of WIFI when both wifi and data connection are enabled?

like image 602
user5150403 Avatar asked Sep 06 '15 03:09

user5150403


1 Answers

You can use data connection instead of WIFI only if you are working on Android Lollipop.

And it seems you are trying to use Android Lollipop with target API 23 because you used bindProcessToNetwork instead of setProcessDefaultNetwork.

Android Lollipop allows the multi-network connection.

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
    }
});
like image 118
Lollipop Avatar answered Sep 28 '22 08:09

Lollipop