2010-04-30 14 views
7

में प्राथमिकताएं प्राप्त करें मुझे लगता है कि मुझे अपने AppWidgetProvider कक्षा से वरीयताओं को पढ़ने में परेशानी हो रही है। मेरा कोड किसी गतिविधि में काम करता है, लेकिन यह AppWidgetProvider में नहीं है। यहाँ कोड मैं एक बूलियन वापस पढ़ने के लिए उपयोग कर रहा हूँ है:AppWidget प्रदाता

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

हालांकि, मैं मिलता है त्रुटि "विधि getSharedPreferences (स्ट्रिंग, पूर्णांक) प्रकार विजेट के लिए अपरिभाषित है" (विजेट मेरी AppWidgetProvider का नाम है कक्षा)।

किसी भी सुझाव के लिए अग्रिम धन्यवाद!

उत्तर

12

getSharedPreferences(), क्या आप इसका उपयोग करना चुनते हैं, केवल Context के उप-वर्गों पर उपलब्ध है, जैसे Activity या ServiceAppWidgetProviderBroadcastReceiver का उप-वर्ग है, जो Context नहीं है।

कहा कि किया जा रहा है, तो आप PreferenceScreen प्रणाली का उपयोग करने जा रहे हैं, या यदि आप निश्चित नहीं हैं कि यह होगा होगा होगा getSharedPreferences() हो, मैं PreferenceManager.getDefaultSharedPreferences() बजाय प्रयोग करेंगे। वे SharedPreferences हैं जो PreferenceScreen/PreferenceActivity उपयोग करेंगे।

+0

यही काम किया, धन्यवाद! –

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); 
} 
संबंधित मुद्दे