Получить настройки в AppWidget Provider - PullRequest
7 голосов
/ 01 мая 2010

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

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

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

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

Ответы [ 2 ]

13 голосов
/ 01 мая 2010

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

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

6 голосов
/ 25 января 2011

Вам нужно было передать контекст в методе 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);
}
...