7

我似乎无法从我的 AppWidgetProvider 类中读取首选项。我的代码在 Activity 中有效,但在 AppWidgetProvider 中无效。这是我用来读回布尔值的代码:

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

但是,我收到“类型小部件的方法 getSharedPreferences(String, int) 未定义”错误(小部件是我的 AppWidgetProvider 类的名称)。

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

4

2 回答 2

13

getSharedPreferences(),如果您选择使用它,它仅适用于Context、likeActivity或的子类ServiceAppWidgetProvider是 的子类BroadcastReceiver,而不是Context

话虽这么说,如果您要使用该PreferenceScreen系统,或者如果您不确定它是否必须是getSharedPreferences(),我会使用它PreferenceManager.getDefaultSharedPreferences()。这些是SharedPreferences/PreferenceScreenPreferenceActivity使用的。

于 2010-05-01T00:08:17.937 回答
6

您应该已经在小部件的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);
}
于 2011-01-25T12:50:09.733 回答