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