2013-06-10 3 views
0

모바일 네트워크를 켜거나 끄려면 아래 코드를 사용하고 있습니다.안드로이드 젤리에서 프로그래밍 방식으로 모바일 네트워크 연결을 켜고 끄기

 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에서 실패했습니다.

Android Jelly Bean으로 테스트하는 동안 java.lang.NoSuchFieldException: mService 예외가 발생합니다.

내 문제의 해결책이 있습니까? 매니페스트 파일에 필요한 모든 권한을 추가했습니다.

+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); ** 외부 ** 시도 잡기 블록? getDeclaredMethod가 예외를 throw하면 dataMtd는 null이되고 충돌 할 것입니다. – njzk2

+0

나는 이것을 이미 시도했으며 응용 프로그램은 이제 내 친구 인 플레이 저장소에서 사용할 수 있습니다. 이것은 하나의 코드입니다. –

+0

나는 그것이 작동하지 않는다고 말하지 않고있다, 나는 단지 그것이 논리/일관성이 없다는 것을 말하고있다. ** 예외가있을 수 있으므로 예외를 잡을 수 있습니다. 따라서 가능성을 완전히 고려해야합니다. – njzk2