2013-11-25 3 views
0

저는 PreferenceActivity가 있는데 여기에는 CheckboxPreference이 있습니다. CheckboxPreference를 클릭하여 모바일 데이터를 사용 또는 사용하지 않도록 설정 했으므로이 코드를 작성했습니다.CheckBoxPreference를 사용하여 모바일 데이터를 사용 또는 사용하지 않도록 설정 하시겠습니까?

//Outside of Methods 
void turnData(boolean ON) throws Exception 
    { 

     final ConnectivityManager conman = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); 
     final Class conmanClass = Class.forName(conman.getClass().getName()); 
     final java.lang.reflect.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); 
    } 

    //In the onCreate 
    final boolean o = false; 
    boolean mobileDataEnabled = false; 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 

     try { 
      Class cmClass = Class.forName(cm.getClass().getName()); 
      Method method = cmClass.getDeclaredMethod("getMobileDataEnabled"); 
      method.setAccessible(true); 
      mobileDataEnabled = (Boolean)method.invoke(cm); 
     } catch (Exception e) { 

     } 

     if(mobileDataEnabled) { 
      ((CheckBoxPreference)Data).setChecked(true); 

      //The Mobile Data are enabled 
      Data.setSummary("Mobile Data enabled"); 
      dati = true; 
     } 

     else { 
      //The Mobile Data are disabled 
      ((CheckBoxPreference)Data).setChecked(false); 

      try { 
       turnData(mobileDataEnabled); 
      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      Data.setSummary("Mobile Data disabled"); 
      dati = false; 
     } 

     Data.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
      public boolean onPreferenceClick(Preference preference) { 

       if (dati==true) { 

         Data.setSummary("Mobile Data enabled"); 
         dati = false; 

       } 

       else if (dati==false){ 

        try { 
          //The problem is here 
          //What should I put in the parentheses? 
          turnData(o); 
         } catch (Exception e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 

         Data.setSummary("Mobile Data disabled"); 
         dati = true; 

       } 

       return false; 


      } 
      }); 

코드의 주석에서 언급 한 것처럼 문제는 메서드를 호출 할 때 괄호 안에 무엇을 넣어야하는지입니다. 질문이 사소한 것 같으면 사과드립니다 **.하지만 나와 함께 견뎌주십시오. 나는 초급이다.

+0

http://stackoverflow.com/questions/11662978/how-to-provide-option-to-select-wi-fi-or-gprs-for-network-connectivity-in이 체크 아웃 -androi/11663173 # 11663173 – JiTHiN

+0

모바일 데이터를 활성화/비활성화하는 코드를 메서드에 넣고 해당 메서드를 onPreferenceClick 메서드에서 호출합니다. – Sajmon

+0

안녕하십니까. 응답 해 주셔서 감사합니다. 내 질문을 업데이 트하고 제안대로 할려고했는데 문제가 생겼어. 내가 도와 줄 수 있니? 미리 감사드립니다. –

답변

0

나는 당신이 말한대로, 때문에

이 코드를 호출 할 수 없습니다, 제대로 이해하면 "내가 CheckBoxPreference 클릭하면 아무 반응이 없습니다."

확인란을 Preference.OnPreferenceChangeListener에 바인딩 했습니까? 기본 "환경 설정 작업 템플릿"은이를 수행하는 방법을 보여줍니다. https://stackoverflow.com/questions/13596250/how-to-listen-for-preference-changes-within-a-preferencefragment

private OnPreferenceChangeListener onPrefChangeListener = new OnPreferenceChangeListener() { 

    @Override 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
}; 
+0

안녕하세요, 내 질문을 업데이트했습니다. –

관련 문제