2010-04-30 64 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); 
}