PreferenceManager.getDefaultSharedPreferences() против getPreferences()
PreferenceManager.getDefaultSharedPreferences(context)
а также
getPreferences()
кажется, чтобы получить разные настройки.
PreferenceManager.getDefaultSharedPreferences(context).getBoolean(
"userWasAskedToEnableGps", false);
для меня возвращается ложь,
getPreferences(MODE_PRIVATE).getBoolean("userWasAskedToEnableGps", false);
возвращает истину.
Предпочтение было написано с редактором, как
Editor e = getPreferences(MODE_PRIVATE).edit();
e.putBoolean (...);
e.commit();
Как я могу получить те же настройки вне действия из контекста?
3 ответа
Из Android GitHub репо ( 1), мы можем видеть, что getPreferences
не делает ничего, кроме вызова getSharedPreferences
метод с текущим именем класса.
public SharedPreferences getPreferences( int mode ) {
return getSharedPreferences( getLocalClassName(), mode );
}
Ничто не ограничивает другие действия / код от доступа к общему предпочтению с соответствующим именем класса. Более того, я предпочитаю не использовать getPreferences
, поскольку это подразумевает => никогда не менять имя действия. Если вы измените, то позаботьтесь о доступе к общим настройкам с явным упоминанием более раннего имени класса (до обновления).
Согласно документам
getSharedPreferences()
- Используйте это, если вам нужно несколько файлов предпочтений, идентифицируемых по имени, которое вы указываете в первом параметре.
getPreferences()
- Используйте это, если вам нужен только один файл настроек для вашей деятельности. Поскольку это будет единственный файл настроек для вашей Деятельности, вы не предоставите имя.область действия ограничена деятельностью, в которой он создан
Поэтому, если вы хотите, чтобы предпочтение было доступно в другом действии или контексте, вы должны использовать любой изgetSharedPreferences()
или жеgetDefaultSharedPreferences()
Это объясняет вам разницу между ними.
Используйте Context.getSharedPreferences с тем же именем константы, и он даст вам одинаковые настройки в любой точке вашего приложения.