在AppWidget Provider中获取首选项

时间:2010-04-30 23:45:26

标签: android android-widget preferences android-preferences

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

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

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

提前感谢任何建议!

2 个答案:

答案 0 :(得分:13)

getSharedPreferences(),如果您选择使用它,则只能在Context的子类上使用,例如ActivityServiceAppWidgetProviderBroadcastReceiver的子类,不是Context

话虽如此,如果您打算使用PreferenceScreen系统,或者如果您不确定它必须是getSharedPreferences(),我会使用PreferenceManager.getDefaultSharedPreferences()代替。这些是SharedPreferences / PreferenceScreen将使用的PreferenceActivity

答案 1 :(得分:6)

您应该已经在窗口小部件的onUpdate()方法中传递了一个上下文,因此您可以调用context.getSharedPreferences()

对于per-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);
}