I'm currently taking the "Developing Android Apps" Udacity course. In the "Lesson 3: New Activities and Intents > Use SharedPreferences" segment, the instructor asked me to dig around the Android Developer site for how to get the user preferences from SharedPreferences
. However, I found it different between the official documentation and the course's solution.
The Udacity course's solution says, to grab a SharedPreferences
instance for the PreferenceActivity
, you should call:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
(where getActivity()
is simply the Context
here because it's called inside a Fragment
.)
While the official documentation on Android Developer Site indicates that you should call:
SharedPreferences prefs = getActivity().getPreferences(Context.MODE_PRIVATE)
So what's the difference between PreferenceManager.getDefaultSharedPreferences(Context context)
and Activity.getPreferences(int mode)
?
Please note: This question does not involve anything about getSharedPreferences()
which requires a file name. It's about the difference between getPreferences()
and getDefaultSharedPreferences()
.
Thanks in advance.
From the first article linked below: "Note: The SharedPreferences APIs are only for reading and writing key-value pairs and you should not confuse them with the Preference APIs, which help you build a user interface for your app settings (although they use SharedPreferences as their implementation to save the app settings)."
http://developer.android.com/training/basics/data-storage/shared-preferences.html
http://developer.android.com/guide/topics/ui/settings.html
One of the major differences: getPreferences () returns a file only related to the activity it is opened from. While getDefaultSharedPreferences () returns the application's global preferences. Learned that the hard way yesterday.
Acoording to the link you provided to Android documentation
So it is, use getSharedPreferences when the data you want to save/retrieve can be used from different activities in the app. If those preferences will only be used in one Activity, you can use getPreferences.
Edit: also note that as said in the post you linked 'getDefaultSharedPreferences will use a default name like "com.example.something_preferences", but getSharedPreferences will require a name'
If you take a look inside PreferenceManager:
So getDefaultSharedPreferences() use getSharedPreferences() method with your app package name and mode private, if you use getPreferences() from activity it will use the same getSharedPreferences() method but with getLocalClassName();