2012-09-05 2 views
1

내가 프로그래밍 모바일 데이터 사용 안함

내가이

private void setMobileDataEnabled(Context context, boolean enabled) { 
    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); 
} 

StackOverFlow Link

을 따라하지만 난이 오류 "에 println 메시지를 필요 java.lang.NullPointerException이"를 가지고 모바일 데이터 연결을 해제 할 필요가

로그

09-05 18:20:29.081: E/AndroidRuntime(736): FATAL EXCEPTION: Timer-0 
09-05 18:20:29.081: E/AndroidRuntime(736): java.lang.NullPointerException: println needs a message 
09-05 18:20:29.081: E/AndroidRuntime(736): at android.util.Log.println_native(Native Method) 
09-05 18:20:29.081: E/AndroidRuntime(736): at android.util.Log.d(Log.java:138) 
09-05 18:20:29.081: E/AndroidRuntime(736): at com.anand.batterysaver.BatterySaverActivity.checkScreenStatus(BatterySaverActivity.java:69) 
09-05 18:20:29.081: E/AndroidRuntime(736): at com.anand.batterysaver.BatterySaverActivity$1.run(BatterySaverActivity.java:43) 
09-05 18:20:29.081: E/AndroidRuntime(736): at java.util.Timer$TimerImpl.run(Timer.java:284) 

checkScreenStatus 기능

public void checkScreenStatus(){ 
     PowerManager powermanager; 
     GetProcessList list = new GetProcessList(); 
     ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); 

     powermanager = (PowerManager) this.getSystemService(Context.POWER_SERVICE); 
     if (powermanager.isScreenOn() == false) 
     { 
      Log.d("PowerStatus","Lock All Settings"); 
      boolean gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED; 
      Log.d("Locked gprsStatus",String.valueOf(gprsstatus)); 
      if(gprsstatus == true){ 
       try{ 
        list.setDataEnabled(getApplicationContext(), false); 
       }catch (Exception e) {Log.d("Exception",e.getMessage()); } 
      } 
     }else{ 
      Log.d("PowerStatus","Resume All"); 
      gprsstatus = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED; 
      Log.d("Locked gprsStatus",String.valueOf(gprsstatus)); 
      if(gprsstatus == true){ 
       TelephonyManager gprs = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
       if(gprs.getDataState() == TelephonyManager.DATA_CONNECTED){ 
        Log.d("Gprs","on"); 
       } 
      } 
     } 
    } 
+0

전체 스택 트레이스 게시 – njzk2

답변

4

이 시도 : 를이

private static void updateAPN(Context paramContext, boolean enable) { 
    try { 
     ConnectivityManager connectivityManager = (ConnectivityManager) paramContext.getSystemService("connectivity"); 
     Method setMobileDataEnabledMethod = ConnectivityManager.class.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE); 
     setMobileDataEnabledMethod.setAccessible(true); 
     setMobileDataEnabledMethod.invoke(connectivityManager, enable); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

보너스 (이 시장에 내 애플 리케이션 중 하나의 코드입니다) 작동 :에 의해

private static boolean isAPNEnabled(Context paramContext) { 
    try { 
     NetworkInfo networkInfo = ((ConnectivityManager) paramContext.getSystemService("connectivity")).getActiveNetworkInfo(); 
     return networkInfo.isConnected(); 
    } catch (Exception e) { 
     return false; 
    } 
} 

이런 식으로 잊지 마세요.

+0

해당 예외 발생 Println에 메시지가 필요합니다. – Bucks

+0

흠, 예외적으로 보았습니다. setMobileDataEnabled 함수에서 예외가 아닌 것 같습니다. 맞습니까? –

+0

이 함수의 코드에 대한 전체 스택 추적을 게시하십시오. turnData –

0

나는 같은 방법을 사용하지만, 나는 다음과 같이 예외를 throw 추가 :이 방법으로

public static void setMobileDataEnabled(Context context, boolean enabled)throws Exception { 
     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); 
    } 

이 방법은

try { 
    Tools.setMobileDataEnabled(getApplicationContext(), true); //true for enable, false for disable 
    } catch (Exception e) { } 
} 

에게 전화를 나를 위해 작동합니다.

+0

비활성화 할 필요가 없습니다. – Bucks

+0

Tools.setMobileDataEnabled (getApplicationContext(), false); 이 줄을 이렇게 변경하면 연결이 비활성화됩니다. – nexusone

+0

같은 에러 java.lang.NullPointerException : Println가 메세지를 필요로한다 – Bucks