Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 AppWidgetProvider. 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!

like image 578
strange quark Avatar asked Apr 30 '10 23:04

strange quark


2 Answers

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.

like image 58
CommonsWare Avatar answered Oct 16 '22 04:10

CommonsWare


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);
}
like image 41
David Leonard Avatar answered Oct 16 '22 04:10

David Leonard