2013-06-10 5 views
0

Я использую ниже код для включения/выключения мобильной сети.Включить/выключить мобильное сетевое подключение программно в Android-железе Android

 final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     final Class conmanClass = Class.forName(conman.getClass().getName()); 
     final Field iConnectivityManagerField = conmanClass.getDeclaredField("mService"); 
     iConnectivityManagerField.setAccessible(true); 
     final Object iConnectivityManager = iConnectivityManagerField.get(conman); 
     final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName()); 
     final Method setMobileDataEnabledMethod = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
     setMobileDataEnabledMethod.setAccessible(true); 
     setMobileDataEnabledMethod.invoke(iConnectivityManager, ON); 

Я проверил этот код с Android 2.3.X, 4.0.X и 4.1.X. Он работает только с 2.3.X и 4.0.X, но не удалось с 4.1.X.

Я получаю исключение java.lang.NoSuchFieldException: mService во время тестирования с помощью Android Jelly Bean.

Есть ли другие решения для моей проблемы? Я добавил все необходимые разрешения в файл манифеста.

+0

Не нужен ли ваш телефон для этого? –

+0

Не знаете, нужны ли вам какие-то другие сети или вы хотите работать в не подключенном режиме, но думаете ли вы о режиме самолета? – lithos35

ответ

2
try 
       { 
    dataMtd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); 
       } 
       catch (SecurityException e1) 
       { 

       e1.printStackTrace(); 
       } 
       catch (NoSuchMethodException e1) 
       { 

       e1.printStackTrace(); 
       } 

       dataMtd.setAccessible(true); 
       try { 

       dataMtd.invoke(conm,true); 



       } 
} 

Где datamtd - метод. Попробуйте с этим мой друг. Я нашел его успешным в своем предыдущем приложении. Надеюсь, это может вам помочь. Извините, если нет, так как я не очень опытен. :)

+0

Почему вы cann dataMtd.setAccessible (true); ** вне ** блок catch try? если getDeclaredMethod выбрасывает исключение, dataMtd будет null, и вы потерпите крах – njzk2

+0

Я уже пробовал это, и теперь приложение доступно в магазине воспроизведения моего друга. Это часть кода из этого. –

+0

Я не говорю, что это не работает, я просто говорю, что это не логично/непротиворечиво. вы поймаете исключение **, потому что ** может быть одно, поэтому вы должны полностью рассмотреть возможность. – njzk2

Смежные вопросы