2010-04-30 80 views
7

我似乎無法從我的AppWidgetProvider類中讀取偏好設置。我的代碼在Activity中工作,但不在AppWidgetProvider中。下面是我使用讀回一個布爾代碼:在AppWidget Provider中獲取偏好設置

SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
boolean autoreplyon = settings.getBoolean("autoreplyon", false); 

不過,我得到了「的方法getSharedPreferences(字符串,整數)是未定義的類型的widget」的錯誤(widget是我的AppWidgetProvider的名字類)。

在此先感謝您的任何建議!

回答

12

getSharedPreferences(),如果您選擇使用它,僅適用於Context的子類,如ActivityServiceAppWidgetProviderBroadcastReceiver的一個子類,它不是Context。這就是說,如果你打算使用PreferenceScreen系統,或者如果你不確定它必須是getSharedPreferences(),我會使用PreferenceManager.getDefaultSharedPreferences()來代替。這些是,即PreferenceScreen/PreferenceActivity將使用。

+0

這工作,謝謝! – 2010-05-01 01:38:42

6

您應該已通過窗口小部件的onUpdate()方法的上下文,因此您可以撥打context.getSharedPreferences()

對於每appwidget的喜好,我已經使用這個:

public static String getSharedPreferencesNameForAppWidget(Context context, int appWidgetId) { 
    return context.getPackageName() + "_preferences_" + appWidgetId; 
} 

public static SharedPreferences getSharedPreferencesForAppWidget(Context context, int appWidgetId) { 
    return context.getSharedPreferences(
     getSharedPreferencesNameForAppWidget(context, appWidgetId), 0); 
}