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 с тем же именем константы, и он даст вам одинаковые настройки в любой точке вашего приложения.

Другие вопросы по тегам