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
여기

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

으로 와이파이 상태를 변경할 수

은 클릭으로 볼 수있는 대답은 here

Dataconnection 비활성화 및 활성화 APIS가에 숨겨진입니다 SDK를 사용하고 사용자에게 노출시키지 않으면 Java 반사 기술을 사용하여 ITelephony 인터페이스에 액세스하여이를 수행 할 수 있습니다. 여기

당신은 이동 :이 코드가 작동

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) 버전에서 더 이상 지원되지 않는다는 것을 알았습니까? [Link : http://stackoverflow.com/questions/4715250/how -to-grant-modify-phone-state-permission-for-apps-ran-on-gingerbread]를 사용합니다. 사실입니까? – Suman

+0

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

+0

정보를 제공해 주셔서 감사합니다. 하지만 그것은 작동하지 않습니다, 나는 MODIFY_PHONE_STATE 권한 예외를 받고 있는데도 AndroidManifest.xml 파일에 같은 것을 추가했습니다. wifi에 투표. – Suman

관련 문제