[英]The method getPreferenceManager() is undefined for the type BatteryService in android app
我正在提供服务,所以我有从服务扩展的服务类。 我从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;
}
我怎么解决这个问题? 请帮助
getPreferencesManager()
函数在Service
派生对象上不可用 - 仅在可能复制上述代码的PreferenceActivity或PreferenceFragment派生对象或单个Preference对象上。
如果您只想在服务启动时对复选框首选项的值进行采样,请使用以下内容:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean alarm = sp.getBoolean("cbAlarm", false); // defaulting to false
但是,我猜你的监听器代码,如果用户更改了设置,你也希望收到通知。 这意味着在PreferenceActivity / PreferenceFragment中保持onPreferenceChange,并向服务发送消息。 为此,考虑Android之类的最佳方式从Activity到Service / Engine进行通信 ,或者只是在Alarm关闭时无所事事地启动/停止整个服务!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.