2010-04-30 16 views
7

Parece que tengo problemas para leer las preferencias de mi clase AppWidgetProvider. Mi código funciona en una actividad, pero no en un AppWidgetProvider. Aquí está el código que estoy utilizando para leer de nuevo un valor lógico:Obtener preferencias en AppWidget Provider

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

Sin embargo, consigo los "Los getSharedPreferences (String, int) no está definido para el widget de tipo" error (widget es el nombre de mi AppWidgetProvider clase).

Gracias de antemano por cualquier sugerencia!

Respuesta

12

getSharedPreferences(), si elige usarlo, solo está disponible en las subclases de Context, como Activity o Service. AppWidgetProvider es una subclase de BroadcastReceiver, que no es Context.

Dicho esto, si se va a utilizar el sistema PreferenceScreen, o si no está seguro de que es tengo que tengo que tengo que ser getSharedPreferences(), me gustaría utilizar PreferenceManager.getDefaultSharedPreferences() lugar. Esos son los SharedPreferences que PreferenceScreen/PreferenceActivity usarán.

+0

que funcionaba, gracias! –

6

Debería haber pasado un contexto en el método onUpdate() del widget para que pueda llamar al context.getSharedPreferences().

Para preferencias por-appwidget, he utilizado este:

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); 
} 
Cuestiones relacionadas