我正在提供服务,所以我有从Service扩展的服务类。我从PreferenceScreen获取一个复选框,并根据是否选中它来执行操作。要获取CheckBoxPreference,我使用getPreferenceManager()方法。但它有红色下划线。当我将鼠标悬停在其上时显示此错误The method getPreferenceManager() is undefined for the type BatteryService
。当我在我的主类中使用相同的代码时,它的工作原理。这是我的代码
public int onStartCommand(Intent intent, int flags, int startId) {
initNotification();
final CheckBoxPreference checkboxPref = (CheckBoxPreference) getPreferenceManager().findPreference("cbAlarm");
checkboxPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
public boolean onPreferenceChange(Preference preference,
Object newValue) {
if (newValue.toString().equals("true")) {
Toast.makeText(getApplicationContext(), "Service Started", Toast.LENGTH_LONG).show();
registerReceiver(batteryInfoReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
} else if (newValue.toString().equals("false")) {
stopService(new Intent(getBaseContext(),
BatteryService.class));
Toast.makeText(getApplicationContext(),
"Unchecked", Toast.LENGTH_SHORT).show();
}
return true;
}
});
return START_STICKY;
}
我该如何解决这个问题?请帮助
答案 0 :(得分:3)
getPreferencesManager()
函数在Service
派生对象上不可用 - 仅在您可能复制上述代码的PreferenceActivity或PreferenceFragment派生对象或单个Preference对象上。
如果您只想在服务启动时对复选框首选项的值进行采样,请使用以下内容:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean alarm = sp.getBoolean("cbAlarm", false); // defaulting to false
但是,我猜你的监听器代码,如果用户更改了设置,你也希望收到通知。这意味着在PreferenceActivity / PreferenceFragment中保持onPreferenceChange,并向服务发送消息。为此,请考虑Android best way to communicate from an Activity to a Service / Engine之类的内容,或者只是在闹钟关闭时无法启动/停止整个服务!