Search code examples
androidsharedpreferencesandroid-preferences

PreferenceManager.getDefaultSharedPreferences() vs getPreferences()


PreferenceManager.getDefaultSharedPreferences(context)

and

getPreferences()

seem to retrieve different Preferences.

PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
                        "userWasAskedToEnableGps", false);

for me returns false,

getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);

returns true.

The Preference was written with an Editor like

Editor e = getPreferences(MODE_PRIVATE).edit(); 
e.putBoolean (...);
e.commit();

How can I get the same Preferences outside of an Activity from the Context?


Solution

  • From android github repo(1), we can see that getPreferences does nothing other than invoking getSharedPreferences method with current class name.

    public SharedPreferences getPreferences( int mode ) {
        return getSharedPreferences( getLocalClassName(), mode );
    }
    

    There is nothing limiting other activities/code from accessing the shared preference with appropriate class name. More importantly, I prefer not to use getPreferences, since that implies => never ever change the Activity name. If you change, then take care of the accessing shared preferences with explicit mentions to the earlier class name ( before upgrade ).