2012-01-23 2 views
0

Я пытаюсь изменить состояние сети устройства из исходного кода.
Я заметил, что есть разрешение на предоставление приложениям для изменения состояния сети, то есть CHANGE_NETWORK_STATE.Как изменить состояние сети устройства из исходного кода на Android?

Но я не могу найти какой-либо пример или код, который может изменить состояние сети устройства.

Пожалуйста, дайте мне знать, если кто-нибудь знает или имеет пример, чтобы изменить состояние сети устройства.

С уважением,
SSuman185

+0

Я написал об этой теме в своем личном блоге. Проверьте это http://www.oguzozkeroglu.com/android-enable-disable-wifi/ (Это на турецком языке, но вы можете понять код) – OguzOzkeroglu

ответ

3

Этот код работает. Я получил его от here.

private void setMobileDataEnabled(Context context, boolean enabled) { 

     try { 
     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 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, enabled); 

     } catch (ClassNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (SecurityException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (NoSuchFieldException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalArgumentException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (NoSuchMethodException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (InvocationTargetException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     finally { 

     } 
    } 
+0

Этот код не работает из службы. Ты знаешь почему? – Kermia

1

вы можете изменить состояние WiFi на

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(true); 

здесь является ответ, который вы можете посмотреть в мыши here

DataConnection отключения и позволяющие АПИС скрыты в SDK и не подвергается воздействию пользователя, это может быть достигнуто путем доступа к интерфейсу ITelephony с использованием технологии отображения java.

здесь вы идете:

Method dataConnSwitchmethod; 
Class telephonyManagerClass; 
Object ITelephonyStub; 
Class ITelephonyClass; 

TelephonyManager telephonyManager = (TelephonyManager) context 
     .getSystemService(Context.TELEPHONY_SERVICE); 

if(telephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED){ 
    isEnabled = true; 
}else{ 
    isEnabled = false; 
} 

telephonyManagerClass = Class.forName(telephonyManager.getClass().getName()); 
Method getITelephonyMethod = telephonyManagerClass.getDeclaredMethod("getITelephony"); 
getITelephonyMethod.setAccessible(true); 
ITelephonyStub = getITelephonyMethod.invoke(telephonyManager); 
ITelephonyClass = Class.forName(ITelephonyStub.getClass().getName()); 

if (isEnabled) { 
    dataConnSwitchmethod = ITelephonyClass 
      .getDeclaredMethod("disableDataConnectivity"); 
} else { 
    dataConnSwitchmethod = ITelephonyClass 
      .getDeclaredMethod("enableDataConnectivity"); 
} 
dataConnSwitchmethod.setAccessible(true); 
dataConnSwitchmethod.invoke(ITelephonyStub); 
+0

Спасибо за информацию. Как только мы получим этот метод, сообщите мне, как вызывать эти методы, а также я обнаружил, что это больше не поддерживается версией GingerBread (2.3). [Ссылка: http://stackoverflow.com/questions/4715250/how -в-грант-изменение-телефон-состояние-разрешение-для-приложений-RAN-на-пряника]. Это правда? – Suman

+0

dataConnSwitchmethod.setAccessible (true); dataConnSwitchmethod.invoke (ITelephonyStub); – AAnkit

+0

Спасибо за информацию. Но он не работает, я получаю исключение разрешения MODIFY_PHONE_STATE, хотя оно добавлено в файл AndroidManifest.xml. Голосование за Wi-Fi. – Suman