У меня проблемы с получением значений (на устройстве Android 9.0) из общих настроек после того, как я переустановил приложение и у меня было allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Согласно этому: https://developer.android.com/guide/topics/data/autobackup
Общие настройки должны быть восстановлены?
SharedPreferences prefs = getSharedPreferences("TEST", MODE_PRIVATE);
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.
SharedPreferences.Editor editor = getSharedPreferences("TEST", MODE_PRIVATE).edit();
editor.putString("name", "Elena");
editor.putInt("idName", 12);
editor.apply();
- Я вошел в свою учетную запись Gmail на (эмуляторе) телефона (API 27), и при переходе в приложение Drive, резервные копии, данные приложения я вижу 18 приложений, таких как Youtube, Gmail и т. Д., А также свое собственное приложение.
- Когда я захожу в «Настройки> Система> Резервное копирование», я вижу те же приложения, а также свое собственное приложение. Я загружаю приложение, код sharedprefs выполняется. Я закрываю приложение и удаляю его из памяти. И тогда я нажимаю кнопку «Резервное копирование сейчас»:
Чтобы убедиться, что я вижу свое приложение в списке, оно получило резервную копию 0 минут назад:
Затем я удаляю и переустанавливаю приложение и ожидаю, что 2 значения (Елена и 12) будут там. Но они стерты ...
Я также попробовал то же самое через командную строку, но тоже не работает: https://developer.android.com/guide/topics/data/testingbackup.html#Preparing
adb shell
dreamlte:/ $ bmgr enabled
Backup Manager currently enabled
dreamlte:/ $ bmgr list transports
android/com.android.internal.backup.LocalTransport
com.google.android.gms/.backup.migrate.service.D2dTransport
* com.google.android.gms/.backup.BackupTransportService
dreamlte:/ $ bmgr backupnow my.package.name
Running incremental backup for 1 requested packages.
Package @pm@ with result: Success
Package nl.dagelijkswoord.android with progress: 1536/309248
Package nl.dagelijkswoord.android with result: Success
Backup finished with result: Success
dreamlte:/ $ dumpsys backup
Backup Manager is enabled / provisioned / not pending init
Auto-restore is disabled
No backups running
Last backup pass started: 1573804513565 (now = 1573806675410)
next scheduled: 1573819001046
...
1573806051616 : my.package.name
dreamlte:/ $ bmgr restore 1573806051616 my.package.name
No matching restore set token. Available sets:
35e84268c94b7d9c : SM-G950F
3a8e32898034f8af : SM-G950F
3e2610c4ea45fb96 : Nexus 5X
done
dreamlte:/ $ bmgr restore 35e84268c94b7d9c my.package.name
Scheduling restore: SM-G950F
restoreStarting: 1 packages
onUpdate: 0 = my.package.name
restoreFinished: 0
done
- Удалить приложение
- Переустановите приложение и проверьте, сохраняются ли значения SharedPreferences.
- Ценности ушли ...
Поведение также, кажется, отличается на устройствах Samsung с Samsung Cloud, но сейчас давайте сосредоточимся на стандартном Android.
ОБНОВИТЬ:
Это больше не работало, потому что я понизил версию в build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Даже с android:restoreAnyVersion="true"
в AndroidManifest
он будет работать только тогда, когда версия не была понижена.
источник
Ответы:
По умолчанию система Android выполняет резервное копирование всех данных по умолчанию, если устройство подключено к сети Wi-Fi (если пользователь устройства не включил резервное копирование мобильных данных), попробуйте переустановить приложение и подключиться с помощью WI-FI, как правило, с помощью системы синхронизации Android. данные один раз в 24 часа, если есть какие-либо изменения. Вы также можете попытаться указать свои собственные правила для резервного копирования, как это.
и создайте XML-файл и поместите его в каталог res / xml. Внутри файла добавьте правила с элементами и. В следующем примере выполняется резервное копирование всех общих настроек, кроме device.xml.
Я надеюсь, что это решит вашу проблему.
источник
В соответствии с документом возврата данных вам необходимо создать SharedPreferencesBackupHelper и выполнить следующие шаги, чтобы выполнить резервное копирование SharedPreferences, а также необходимо зарегистрировать службы резервного копирования для вашего случая.
источник
Пусть эта процедура будет работать для вас. Попробуйте выполнить резервное копирование и восстановление общих настроек пользователя. Это создаст резервную копию ваших предпочтений для любого внешнего хранилища или устройства.
Когда пользователь удаляет приложение, пользователь должен создать его резервную копию. Добавьте некоторую логику: если файл присутствует во внешнем хранилище или устройстве, восстановите его обратно.
используйте приведенный ниже код для резервного копирования ваших предпочтений.
используйте приведенный ниже код для восстановления настроек
затем перезапустите приложение, прежде чем эти преференции вступят в силу
источник
Вы не включили параметры автоматического восстановления, как показано в сообщении консоли. Вам нужно зайти в настройки системы и включить ее. После этого реставрация может заработать.
Настройки -> Резервное копирование -> Автоматическое восстановление.
Кстати, используемый вами токен неверен. 1573806051616 - это метка времени вместо токена. Маркер должен выглядеть так:
Здесь
XXXXXXXXXXXXXXXX
должен быть токен.источник
Чтобы проверить восстановление, вам нужно запустить приведенную ниже команду, не удаляя ваше приложение. Команда восстановления заставит остановить приложение, стереть его данные и выполнить восстановление, следовательно имитируя функциональность AutoBackup Android:
TOKEN
извлекается изlogcat
команды при выполнении команды резервного копирования или изdumpsys backup
команды. Также вы можете проверить,dumpsys backup
чтобы убедиться, что резервная копия была создана.Более подробная информация здесь: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
источник
Один из способов сделать это заключается в следующем (обратите внимание, это может быть не лучшим способом, но это работает!)
Перед удалением приложения сделайте резервную копию. Добавьте некоторую логику: если файл присутствует во внешнем хранилище , восстановите его обратно.
Используйте следующий код для восстановления настроек
ПРИМЕЧАНИЕ . Требуется разрешение на запись и чтение во внешнем хранилище.
источник