Android getDefaultSharedPreferences

Мой код:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
boolean hasBeenShown = prefs.getBoolean(eulaKey, false);

Всегда возвращает разные значения в зависимости от версии os. Протестировано в 2.2, 2.3.4, 3.2, 4.0.3 - возвращает правильное значение. Но для устройства Zte blade с 2.3.7 с CianogenMod 7.1 результат всегда ложный. Я полагаю, что значение по умолчанию для getBoolean.

Здесь написано код boolean:

final String eulaKey = "mykey";
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

Есть ли у кого-нибудь идеи?

Обновление: Сравнивая мой текущий код с моей предыдущей версией кода - в коде нет разницы. В манифесте только различие: код работает Ok с minVersion = 8 и targetVersion = 8 Теперь я компилирую с minversion = 8 и target = 13/из-за Admob/. Возможно, некоторые API изменились, но я ничего не нашел на этом.

РЕШЕНИЕ: -Запустить приложение из ярлыка и из меню дает мне разные DefaultSharedPreferences. После удаления DefaultSharedPreferences из моего кода - он работает отлично. Я не могу просто сказать: люди не делают ярлыки, поэтому мне пришлось изменить код.

Ответ 1

Попробуйте так:

final String eulaKey = "mykey";
Context mContext = getApplicationContext();
mPrefs = mContext.getSharedPreferences("myAppPrefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = mPrefs.edit();
editor.putBoolean(eulaKey, true);
editor.commit();

и в этом случае вы можете указать свое имя файла настроек (myAppPrefs) и можете контролировать доступ к нему. Другие режимы работы:

  • MODE_WORLD_READABLE
  • MODE_WORLD_WRITEABLE
  • MODE_MULTI_PROCESS