2012-05-06 15 views
1

我正在創建一個服務,以便從Service中擴展服務類。我從PreferenceScreen中獲得一個複選框,並根據它是否被選中執行操作。要獲得CheckBoxPreference,我使用getPreferenceManager()方法。但它有紅色的下劃線。當我將鼠標懸停在上面時,向我顯示這個錯誤The method getPreferenceManager() is undefined for the type BatteryService。當我在主類中使用相同的代碼時,它就可以工作。這是我的代碼getPreferenceManager()方法未定義爲android應用程序中的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; 
} 

我該如何解決這個問題?請幫助

+0

任何人都可以幫忙嗎?我仍在等待幫助 – 2619

回答

3

getPreferencesManager()功能不可用在Service派生的對象 - 只在PreferenceActivity或PreferenceFragment衍生,你可能複製從上面的代碼,或者個人喜好對象的對象。

如果你只想要你的服務啓動時採樣複選框首選項的值,使用類似:

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

不過,我從你的監聽器代碼猜你也想,如果被通知用戶更改設置。這意味着在PreferenceActivity/PreferenceFragment中保留PreferenceChange,並向服務發送消息。爲此,請考慮像Android best way to communicate from an Activity to a Service/Engine之類的東西,或者只是在報警關閉時啓動/停止整個服務(如果無關緊要)!

相關問題