【问题标题】:Disable or enable Mobile Data with CheckBoxPreference?使用 CheckBoxPreference 禁用或启用移动数据?
【发布时间】:2013-12-10 11:27:25
【问题描述】:

我有一个 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;


            }
            });

正如代码中的 cmets 所指出的,问题是调用方法时在括号中放入的内容。如果这个问题看起来微不足道,我深表歉意**但请多多包涵。我是初学者。

【问题讨论】:

  • 将启用/禁用移动数据的代码放入方法中,并在onPreferenceClick方法中调用该方法。
  • 您好,感谢您的回复。我已经更新了我的问题,并尝试按照建议进行操作,但我遇到了问题。我能帮帮我吗?提前致谢。

标签: java android xml


【解决方案1】:

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

“当我点击 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;
    }
};

【讨论】:

    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2014-01-14
    • 2013-05-05
    • 2017-06-05
    • 2014-03-20
    • 1970-01-01
    相关资源
    最近更新 更多