जवाबों:
getDefaultSharedPreferences
"com.example.something_preferences" जैसे डिफ़ॉल्ट नाम का उपयोग करेगा, लेकिन getSharedPreferences
इसके लिए एक नाम की आवश्यकता होगी ।
getDefaultSharedPreferences
वास्तव में उपयोग करता है Context.getSharedPreferences
(नीचे Android स्रोत से सीधे है):
public static SharedPreferences getDefaultSharedPreferences(Context context) {
return context.getSharedPreferences(getDefaultSharedPreferencesName(context),
getDefaultSharedPreferencesMode());
}
private static String getDefaultSharedPreferencesName(Context context) {
return context.getPackageName() + "_preferences";
}
private static int getDefaultSharedPreferencesMode() {
return Context.MODE_PRIVATE;
}
getDefaultSharedPreferencesName
सार्वजनिक नहीं है क्योंकि बैकअप / पुनर्स्थापना ढांचे के लिए नाम की आवश्यकता है।
आइए अंतर के मूल बिंदुओं की समीक्षा करें:
getDefaultSharedPreferences()
डिफ़ॉल्ट प्राथमिकता-फ़ाइल नाम का उपयोग करता है। यह डिफ़ॉल्ट प्रति एप्लिकेशन सेट है, इसलिए समान एप्लिकेशन संदर्भ में सभी गतिविधियां इसे निम्न उदाहरण में आसानी से एक्सेस कर सकती हैं:
SharedPreferences spref = PreferenceManager.getDefaultSharedPreferences(this);
if (spref.contains("email")) {
String sEmailAddr = spref.getString("email", "");
}
वरीयताओं को आमतौर पर संग्रहित किया जाता है /data/data/com.package.name/shared_prefs/com.package.name_preferences.xml
।
वैकल्पिक विधि - getSharedPreferences(name,mode)
एक विशिष्ट वरीयता (फ़ाइल) नाम और एक ऑपरेशन मोड (जैसे निजी, world_readable, आदि) को इंगित करने की आवश्यकता होती है।
जैसा कि कोपोली द्वारा उल्लेख किया गया है, परिणाम समान है, लेकिन पहला विकल्प सरल है और लचीलेपन का अभाव कई वरीयता फ़ाइलों में विभाजित करने के लिए है, जो कि दूसरे विकल्प द्वारा प्रस्तुत किया जाता है getSharedPreferences()
। MODE_WORLD_READABLE ऑपरेशन इंडिकेटर का उपयोग करने वाले ऐप्स के बीच वरीयताओं को साझा करना भी उपयोग करना संभव है getSharedPreferences()
, लेकिन शायद ही कभी इसका उपयोग किया जाता है।
IMHO, getDefaultSharedPreferences()
को सुरक्षित रूप से कई वरीयता फ़ाइल नामों की उलझन में जाने के बिना उपयोग किया जा सकता है जो टाइपोस और भ्रम की स्थिति में हैं, जब तक आप नहीं चाहते कि आपके ऐप में अलग-अलग मॉड्यूल अलग-अलग वरीयता फ़ाइलों का उपयोग करेंगे। आम तौर पर इसकी जरूरत नहीं होती है। यदि किसी ऐप को बहुत सारे मापदंडों को सहेजने की आवश्यकता है, तो शायद बाहरी डेटाबेस का उपयोग करना बेहतर होगा क्योंकि यह बेहतर डेटा सुरक्षा भी प्रदान करता है।
अगर किसी को नियमित रूप से getSaredPreferences () और getDefaultSaredPreferences () का उपयोग करने के लिए एक अच्छे कारण के बारे में पता है, तो कृपया मुझे यहाँ टिप्पणी करके बताएं।
मुझे पता है कि यह पोस्ट थोड़ी पुरानी है, लेकिन v7 समर्थन पुस्तकालय के 24.0.1 के बाद से आप कहीं भी उपयोग करके डिफ़ॉल्ट प्राथमिकताओं को प्राप्त कर सकते हैं
// context might be an application context, activity, ..
// so if you want to get your apps defaults, pass an activity context
PreferenceManager.getDefaultSharedPreferences(context)
Https://developer.android.com/reference/android/support/v7/preference/PreferenceManager#getdefaults सहायता के संदर्भ देखें
एक 3 फ़ंक्शन भी है:
public SharedPreferences Activity.getPreferences(int mode) {}
मेरा प्रश्न और उत्तर यहां देखें: Android की साझा प्राथमिकताओं के साथ मेस - किस फ़ंक्शन का उपयोग करना है?
दोनों getSaredPreferences () और getDefaultSaredPreferences () का उपयोग एप्लिकेशन-स्तर की प्राथमिकताओं तक पहुंचने के लिए किया जाता है। getDefaultSaringPreferences () का उपयोग करना बेहतर है क्योंकि यह SharedPreferences ऑब्जेक्ट देता है जो डिफ़ॉल्ट रूप से प्राथमिकता के साथ काम करता है।
ध्यान रखें कि डिफ़ॉल्ट साझा प्राथमिकताओं का उपयोग करना आपके पैकेज नाम के साथ साझा प्राथमिकताओं का उपयोग करने के समान नहीं है:
context.getSharedPreferences(getPackageName(), MODE_PRIVATE);
=> साझा प्राथमिकताओं का नाम: " com.my.packagename "
PreferenceManager.getDefaultSharedPreferences(context);
=> साझा प्राथमिकताओं का नाम: " com.my.packagename_preferences "
Context
किसी एक को कॉल करने के लिए एक उदाहरण की आवश्यकता है ।