gpt4 book ai didi

java - android 应用程序中的 BatteryService 类型未定义方法 getPreferenceManager()

转载 作者:行者123 更新时间:2023-11-29 06:00:08 24 4
gpt4 key购买 nike

我正在提供服务,所以我有从 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;
}

我该如何解决这个问题?请帮忙

最佳答案

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 的内容,或者如果在警报关闭时没有任何事情可做,只需启动/停止整个服务!

关于java - android 应用程序中的 BatteryService 类型未定义方法 getPreferenceManager(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10469902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com