1

私はサービスを作っているので、サービスから拡張されたサービスクラスがあります。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;
}

どうすればこの問題を解決できますか? 助けてください

4

1 に答える 1

3

このgetPreferencesManager()関数は、派生オブジェクトでは使用できませんService。上記のコードをコピーした可能性のある PreferenceActivity または PreferenceFragment 派生オブジェクト、または個々の Preference オブジェクトでのみ使用できます。

サービスの開始時にチェックボックス設定の値のみをサンプリングしたい場合は、次のようなものを使用します。

SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
boolean alarm = sp.getBoolean("cbAlarm", false);    // defaulting to false

ただし、リスナーコードから、ユーザーが設定を変更した場合にも通知を受け取りたいと推測しています。これは、PreferenceActivity/PreferenceFragment に onPreferenceChange を保持し、サービスにメッセージを送信することを意味します。そのためには、 Activity から Service / Engine に通信するための Android の最良の方法のようなものを検討するか、アラームがオフのときに何もしない場合は、単にサービス全体を開始/停止してください!

于 2013-02-20T22:27:42.150 に答える