【发布时间】: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方法中调用该方法。 -
您好,感谢您的回复。我已经更新了我的问题,并尝试按照建议进行操作,但我遇到了问题。我能帮帮我吗?提前致谢。