【问题标题】:Get preferences in AppWidget Provider在 AppWidget Provider 中获取首选项
【发布时间】:2010-04-30 23:45:26
【问题描述】:

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

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

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

提前感谢您的任何建议!

【问题讨论】:

    标签: android android-widget preferences android-preferences


    【解决方案1】:

    getSharedPreferences(),如果您选择使用它,它仅适用于 Context 的子类,例如 ActivityServiceAppWidgetProviderBroadcastReceiver 的子类,它不是Context

    话虽如此,如果您要使用PreferenceScreen 系统,或者如果您不确定一定要使用getSharedPreferences(),我会使用PreferenceManager.getDefaultSharedPreferences()。这些是PreferenceScreen/PreferenceActivity 将使用的SharedPreferences

    【讨论】:

      【解决方案2】:

      您应该已经在小部件的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-11-25
        • 1970-01-01
        • 2014-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多