Get preferences in AppWidget Provider
I seem to be having trouble reading preferences from my AppWidgetProvider class. My code works in an Activity, but it does not in an AppWi开发者_StackOverflow社区dgetProvider. Here is the code I am using to read back a boolean:
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean autoreplyon = settings.getBoolean("autoreplyon", false);
However, I get the "The method getSharedPreferences(String, int) is undefined for the type widget" error (widget is the name of my AppWidgetProvider class).
Thanks in advance for any suggestions!
getSharedPreferences()
, should you choose to use it, is only available on subclasses of Context
, like Activity
or Service
. AppWidgetProvider
is a subclass of BroadcastReceiver
, which is not a Context
.
That being said, if you are going to use the PreferenceScreen
system, or if you are not certain that it's gotta gotta gotta be getSharedPreferences()
, I would use PreferenceManager.getDefaultSharedPreferences()
instead. Those are the SharedPreferences
that PreferenceScreen
/PreferenceActivity
will use.
You should have been passed a context in widget's onUpdate()
method so you can call context.getSharedPreferences()
.
For per-appwidget preferences, I have used this:
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);
}
精彩评论