2010-04-30 11 views
7

Mi sembra di avere problemi a leggere le preferenze dalla mia classe AppWidgetProvider. Il mio codice funziona in un'attività, ma non in un AppWidgetProvider. Ecco il codice che sto usando per leggere di nuovo un valore booleano:Ottieni le preferenze in AppWidget Provider

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

Tuttavia, mi vengono i "Il metodo getSharedPreferences (String, int) è definito per il tipo di widget di" errore (widget è il nome del mio AppWidgetProvider classe).

Grazie in anticipo per eventuali suggerimenti!

risposta

12

getSharedPreferences(), se si sceglie di usarlo, è disponibile solo per sottoclassi di Context, come Activity o Service. AppWidgetProvider è una sottoclasse di BroadcastReceiver, che non è un Context.

Detto questo, se avete intenzione di utilizzare il sistema PreferenceScreen, o se non si è certi che è devo gotta devo essere getSharedPreferences(), userei PreferenceManager.getDefaultSharedPreferences() invece. Questi sono i SharedPreferences che verrà utilizzato da PreferenceScreen/PreferenceActivity.

+0

che ha funzionato, grazie! –

6

Si dovrebbe essere passato un contesto nel metodo onUpdate() del widget in modo da poter chiamare context.getSharedPreferences().

Per le preferenze per-AppWidget, ho usato questo:

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); 
} 
Problemi correlati