繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM