6

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?

AliSh
  • 10,085
  • 5
  • 44
  • 76
user5150403
  • 61
  • 1
  • 1
  • 2
  • Not possible, the OS decides how to route data. Your best bet would be to just wait until the device is not connected to WiFi, and connected to mobile data before performing the operation. – Daniel Nugent Sep 06 '15 at 03:25

1 Answers1

14

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
    }
});
frogatto
  • 28,539
  • 11
  • 83
  • 129
Lollipop
  • 141
  • 2
  • I am trying `connectivityManager.bindProcessToNetwork` on Nougat and it is not working. The method is returning false. Any ideas? – dazza5000 Mar 09 '20 at 17:24