2012-05-06 6 views
1

私はサービスを作成しているので、サービスから拡張されたサービスクラスがあります。私はPreferenceScreenからチェックボックスを取得しており、チェックされているかどうかに基づいてアクションを実行します。 CheckBoxPreferenceを取得するにはgetPreferenceManager()メソッドを使用します。しかし、それは赤い下線を持っています。上にカーソルを置くと、このエラーThe method getPreferenceManager() is undefined for the type BatteryServiceが表示されます。私はメインクラスで同じコードを使用すると動作します。ここに私のコードですgetPreferenceManager()メソッドは、Android Appの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; 
} 

どうすればこの問題を解決できますか?ヘルプPlease

+0

誰でも助けることができますか?私はまだ助けを待っている – 2619

答えて

3

getPreferencesManager()ファンクションはの派生オブジェクトでは使用できません。上記のコードをコピーした可能性が高い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のようなものを考えてみるか、アラームがオフのときに何もしなければサービス全体を開始/停止するだけです!

関連する問題