SharedPreferences между различными приложениями работает на эмуляторе, а не на устройстве

#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, это не сработает (по крайней мере, для меня).