2

Я хочу андроид приложение для использования только мобильных данных, даже если WIFI и мобильные данные как на в Android 6. Как связать процесс андроида с данными Mobile.
Пожалуйста, предложите. Примеры будут хорошими.Как использовать мобильные данные силой для любого приложения, когда Wi-Fi включен в Android 6

ответ

0

Вы можете посетить Android force app to use mobile data channel

manager = (WifiManager)this.getSystemService(Context.WIFI_SERVICE); 

if(manager.isWifiEnabled()) { 
    manager.setWifiEnabled(false); 
} 
// and to be sure: 
ConnectivityManager.setNetworkPreference(ConnectivityManager.TYPE_MOBILE); 
+0

Я не хочу _disable WIFI в level_ устройства. просто хочу использовать ** мобильные данные только ** для моего приложения. –

+0

boolean mobileDataEnabled = false; try { Класс cmClass = Class.forName (connection_manager.getClass(). GetName()); Метод метода = cmClass.getDeclaredMethod ("getMobileDataEnabled"); method.setAccessible (true); mobileDataEnabled = (Boolean) method.invoke (connection_manager); } catch (исключение e) { } –

4

Вы можете сделать это довольно легко, если вы андроид версия M или выше. Во-первых, вам нужно правильно манифеста разрешения: < использует-разрешение андроида: имя = "android.permission.ACCESS_NETWORK_STATE"/> < использует разрешение-андроид: имя = "android.permission.CHANGE_NETWORK_STATE"/>

Вот пример того, метод, который должен делать то, что вам нужно:

public static void forceConnectionToMobile2(Context context) { 
    final ConnectivityManager connection_manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
     NetworkRequest.Builder request = new NetworkRequest.Builder(); 

     Log.d(TAG,"request TRANSPORT_CELLULAR"); 
     request.addCapability(NetworkCapabilities.TRANSPORT_CELLULAR); 

     connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback() { 
      @Override 
      public void onAvailable(Network network) { 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
        Log.d(TAG,"binding app to cellular network"); 
        connection_manager.bindProcessToNetwork(network); 
       } 
      } 
     }); 

    } 
} 
1
boolean mobileDataEnabled = false; 

     try { 
      Class cmClass = Class.forName(connection_manager.getClass().getName()); 
      Method method = cmClass.getDeclaredMethod("getMobileDataEnabled"); 
      method.setAccessible(true); 
      mobileDataEnabled = (Boolean) method.invoke(connection_manager); 
     } catch (Exception e) { 
     } 
First check if mobile data enable or disable then do 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
      NetworkRequest.Builder request = new NetworkRequest.Builder(); 
      request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); 
      request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); 

      connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback() { 
       @Override 
       public void onAvailable(Network network) { 
connection_manager.bindProcessToNetwork(network); 
} 
} 
Смежные вопросы