在AppWidget提供程序中获取首选项

我似乎无法从我的AppWidgetProvider类阅读首选项。 我的代码工作在一个活动,但它不在一个AppWidgetProvider。 这里是我用来读回布尔值的代码:

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

但是,我得到的“方法getSharedPreferences(string,整数)未定义的types小部件”错误(小部件是我的AppWidgetProvider类的名称)。

在此先感谢您的任何build议!

Solutions Collecting From Web of "在AppWidget提供程序中获取首选项"

如果您select使用getSharedPreferences() ,则只能在Context子类上使用,例如ActivityServiceAppWidgetProviderBroadcastReceiver一个子类,它不是一个Context

这就是说,如果你打算使用PreferenceScreen系统,或者如果你不确定它必须得到getSharedPreferences() ,我会使用PreferenceManager.getDefaultSharedPreferences()来代替。 这些是PreferenceScreen / PreferenceActivity将使用的SharedPreferences

您应该已经在小部件的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); }