Получить настройки в AppWidget Provider

Кажется, у меня возникли проблемы с чтением настроек из моего класса AppWidgetProvider. Мой код работает в Activity, но не в AppWidgetProvider. Вот код, который я использую для чтения логического значения:

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

Однако я получаю сообщение об ошибке «Метод getSharedPreferences (String, int) не определен для виджета типа» (виджет — это имя моего класса AppWidgetProvider).

Спасибо заранее за любые предложения!


person strange quark    schedule 30.04.2010    source источник


Ответы (2)


getSharedPreferences(), если вы решите его использовать, доступен только в подклассах Context, таких как Activity или Service. AppWidgetProvider является подклассом BroadcastReceiver, который не является Context.

При этом, если вы собираетесь использовать систему PreferenceScreen или если вы не уверены, что это должно быть getSharedPreferences(), я бы вместо этого использовал PreferenceManager.getDefaultSharedPreferences(). Это SharedPreferences, которые будут использовать PreferenceScreen/PreferenceActivity.

person CommonsWare    schedule 01.05.2010

Вам должен был быть передан контекст в методе onUpdate() виджета, чтобы вы могли вызывать context.getSharedPreferences().

Для настроек виджета для каждого приложения я использовал это:

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);
}
person David Leonard    schedule 25.01.2011