#java #android #sharedpreferences #emulation
#java #Android #sharedpreferences #эмуляция
Вопрос:
Я пытаюсь сохранить некоторые ключи с SharedPreferences в первом приложении, затем при инициализации второго приложения загрузите их. Он работает на эмуляторе, но не на устройстве (Android 4.0.3)
Это мой код для первого приложения:
private SharedPreferences gameSaved;
private SharedPreferences.Editor editor;
gameSaved = getApplicationContext().getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
int value = 10;
editor = gameSaved.edit();
editor.putInt("value_0", value);
editor.commit();
Затем во втором приложении я получаю значение ключа следующим образом:
try{
con = getApplicationContext().createPackageContext("com.example.firstapp", 0);
} catch (NameNotFoundException e) {
}
SharedPreferences pref = con.getSharedPreferences(PREFS_NAME, Context.CONTEXT_IGNORE_SECURITY);
int value = pref.getInt("value_0", -1);
В манифесте оба приложения используют эту строку:
android:sharedUserId="com.example.shared"
Я проверил, что файл SharedPreferences правильно создан и расположен.
Самое странное, что он отлично работает на эмуляторе.
Пожалуйста, помогите, у меня заканчиваются идеи.
Комментарии:
1. Вы убедились, что оба приложения подписаны одним и тем же сертификатом?
2. Как я могу проверить, какой сертификат есть у каждого приложения?
3. Если вы установили оба приложения из одной и той же среды IDE на один и тот же компьютер, они должны быть подписаны одним и тем же сертификатом отладки, если у вас не указан другой сертификат.
4. Да, я использую ту же IDE на том же ПК
Ответ №1:
Я, наконец, смог решить эту проблему, но у меня нет никаких технических объяснений для этого.
Ранее у меня в обоих приложениях было одинаковое имя файла для него:
SharedPreferences pref = con.getSharedPreferences(FILE_NAME, Context.CONTEXT_IGNORE_SECURITY);
Это не имеет особого смысла, потому что эти файлы хранятся / сохраняются в папке данных другого приложения, но если они используют одно и то же имя файла SharedPreferences, это не сработает (по крайней мере, для меня).