2

Я хочу достичь маршрутизатор, таким образом:Как отключить передачу данных LTE программно в android 6 и android 7?

isReachable = InetAddress.getByName("192.168.1.1").isReachable(2000);

Но она возвращает ложь.

С любопытством, когда я выключаю данные LTE вручную, он работает.

Я нашел этот код для включения/выключения данных LTE программно, но он не работает на Android 6 или 7.

private void setMobileDataEnabled(Context context, boolean enabled) 
{ 
    final ConnectivityManager conman = (ConnectivityManager)  
    final ConnectivityManager conman = (ConnectivityManager) 
    context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    final Class conmanClass = Class.forName(conman.getClass().getName()); 
    final Field iConnectivityManagerField = 
    conmanClass.getDeclaredField("mService"); 
    iConnectivityManagerField.setAccessible(true); 
    final Class iConnectivityManagerClass = 
    Class.forName(iConnectivityManager.getClass().getName()); 
    final Method setMobileDataEnabledMethod = 
    iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", 
    Boolean.TYPE); 
    setMobileDataEnabledMethod.setAccessible(true); 
    setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled); 
} 

Не могли бы вы помочь найти другой способ включения/выключения данных LTE на андроид 6 или 7?

ответ

1

Я нашел, как решить свою проблему. я не могу программно отключить сотовые данные, но если найду способ заставить мое приложение использовать только соединение Wi-Fi. это код:

final ConnectivityManager connectivityManager = 
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE); 

NetworkRequest.Builder request = null; 
    if (android.os.Build.VERSION.SDK_INT >=           
android.os.Build.VERSION_CODES.LOLLIPOP) { 
     request = new NetworkRequest.Builder(); 

     request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); 

     connectivityManager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() { 

     @Override 
     public void onAvailable(Network network) { 
      //if (SDK_INT >= LOLLIPOP && SDK_INT <= M) { 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { 
       ConnectivityManager.setProcessDefaultNetwork(network); 
      } 

      } 
    }); 
    } 
Смежные вопросы