对于Android应用程序中的BatteryService类型,方法getPreferenceManager()未定义

时间:2012-05-06 10:40:49

标签: java android

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

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

1 个答案:

答案 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之类的内容,或者只是在闹钟关闭时无法启动/停止整个服务!