Включить / отключить мобильные данные программно (Lollipop и выше) без рута - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь программно переключить соединение для передачи данных Android в Lollipop Android и выше, но это не работает и всегда получало исключение.

Это мой код

public void setMobileDataState(boolean mobileDataEnabled)
{
   try
   {
       TelephonyManager telephonyService = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

       Method setMobileDataEnabledMethod = telephonyService.getClass().getDeclaredMethod("setDataEnabled", boolean.class);

       if (null != setMobileDataEnabledMethod)
       {
           setMobileDataEnabledMethod.invoke(telephonyService, mobileDataEnabled);
       }
   }
   catch (Exception ex)
   {
        Log.e(TAG, "Error setting mobile data state", ex);
   }
}

1 Ответ

0 голосов
/ 11 сентября 2018

Этот метод работает только для root. На самом деле, после обновления Lollipop невозможно программно включить / отключить мобильные данные. Вы можете сделать это на более низкой версии с этим:

private void setMobileDataEnabled(Context context, boolean enabled) throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException, NoSuchMethodException, InvocationTargetException {
    final ConnectivityManager conman = (ConnectivityManager)  context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final Class conmanClass = Class.forName(conman.getClass().getName());
    final Field connectivityManagerField = conmanClass.getDeclaredField("mService");
    connectivityManagerField.setAccessible(true);
    final Object connectivityManager = connectivityManagerField.get(conman);
    final Class connectivityManagerClass =  Class.forName(connectivityManager.getClass().getName());
    final Method setMobileDataEnabledMethod = connectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
    setMobileDataEnabledMethod.setAccessible(true);

    setMobileDataEnabledMethod.invoke(connectivityManager, enabled);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...