Intereting Posts
Android: Самый простой способ сделать WebView отображением растрового изображения? Скрыть scrollview stick android Чтение штрих-кода ZXing: как сделать пользовательскую границу вокруг экрана захвата? SoundPool: ошибка при создании AudioTrack Есть ли ссылка на View.postDelayed для Android? Пауза / возобновление анимации в API менее 19 (Android)? Eclipse «работает как андроид» ничего не делает Проблема с запасом Браузер собирает фотографии из галереи Google Analytics с Android: программно установить ga_reportUncaughtExceptions? Как изменить область сканирования Zbar? Различные макеты для горизонтального и вертикального для Android-приложения? Как получить частоту кадров видео в android os? Android Studio застряла при создании нового Project on Gradle: Configure Project или Gradle: Resilve Dependencies ': classpath:' Сохранение в папке различных рисунков плотности Информировать активность из BroadcastReceiver ТОЛЬКО, если он находится на переднем плане

Включить / отключить подключение к данным в программном обеспечении Android

Я хочу включить / отключить передачу данных программно. Я использовал следующий код:

void enableInternet(boolean yes) { ConnectivityManager iMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); Method iMthd = null; try { iMthd = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", boolean.class); } catch (Exception e) { } iMthd.setAccessible(false); if(yes) { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Enabled", Toast.LENGTH_SHORT).show(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "IllegalArgumentException", Toast.LENGTH_SHORT).show(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block Toast.makeText(getApplicationContext(), "IllegalAccessException", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block dataButton.setChecked(false); Toast.makeText(getApplicationContext(), "InvocationTargetException", Toast.LENGTH_SHORT).show(); } } else { try { iMthd.invoke(iMgr, true); Toast.makeText(getApplicationContext(), "Data connection Disabled", Toast.LENGTH_SHORT).show(); } catch (Exception e) { dataButton.setChecked(true); Toast.makeText(getApplicationContext(), "Error Disabling Data connection", Toast.LENGTH_SHORT).show(); } } } 

Он работает без ошибок в эмуляторе, но я получаю «InvocationTargetException», когда пытаюсь запустить его на реальном устройстве. Я использую API-уровень 8 для создания приложения.

Solutions Collecting From Web of "Включить / отключить подключение к данным в программном обеспечении Android"

Этот образец кода должен работать для телефонов Android с бегущими пряниками и выше:

 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); } 

Не забудьте добавить эту строку в файл манифеста

 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> 

@riHaN JiTHiN ваша программа отлично работает для версии 2.3 и выше, но ей нужно небольшое изменение в выражении «else»:

 else { try { iMthd.invoke(iMgr, true); 

«Истина» должна быть изменена на «ложную»,

 iMthd.invoke(iMgr, false);