使用CheckBoxPreference禁用或启用移动数据



我有一个PreferenceActivity,其中有一个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;

            }
            });

正如代码中的注释所指出的,问题是在调用方法时要在括号中放什么。如果这个问题看起来微不足道,我很抱歉,但请耐心等待。我是初学者。

如果我理解正确,你就不能调用代码,因为正如你所说,

"当我点击复选框首选项时,什么也没发生。"

您是否尝试将复选框绑定到首选项.OPreferenceChangeListener?默认的"首选项活动模板"显示了如何执行此操作。看看这个: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;
    }
};

最新更新