J'ai du mal à récupérer des valeurs (sur un appareil Android 9.0) à partir des préférences partagées après avoir réinstallé l'application et tout en ayant allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Selon cela: https://developer.android.com/guide/topics/data/autobackup
Les préférences partagées devraient être restaurées?
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();
- Je me suis connecté à mon compte Gmail sur le téléphone (émulateur) (API 27) et lorsque je vais à l'application Drive, aux sauvegardes, aux données d'application, je vois 18 applications telles que Youtube, Gmail, etc. et également ma propre application.
- Lorsque je vais dans "Paramètres> Système> Sauvegarde", je vois les mêmes applications et aussi ma propre application. Je charge l'application, le code sharedprefs est exécuté. Je ferme l'application et la supprime de la mémoire. Et puis j'appuie sur le bouton "Sauvegarder maintenant":
Pour vérifier, je peux voir mon application dans la liste et elle a été sauvegardée il y a 0 minutes:
Ensuite, je supprime et réinstalle l'application et je m'attends à ce que les 2 valeurs (Elena et 12) soient là. Mais ils sont effacés ...
J'ai également essayé la même chose via la ligne de commande, mais ne fonctionnait pas non plus: 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
- Supprimer l'application
- Réinstallez l'application et vérifiez si les valeurs SharedPreferences sont toujours là.
- Les valeurs ont disparu ...
Le comportement semble également différer sur les appareils Samsung avec Samsung Cloud, mais pour l'instant concentrons-nous sur le stock Android.
MISE À JOUR:
Cela ne fonctionnait plus car j'ai rétrogradé la version dans build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Même avec android:restoreAnyVersion="true"
le, AndroidManifest
cela ne fonctionnerait que lorsque la version n'était pas rétrogradée.
la source
Réponses:
Par défaut, le système Android sauvegarde toutes les données par défaut si l'appareil est connecté à un réseau Wi-Fi (si l'utilisateur de l'appareil n'a pas opté pour les sauvegardes de données mobiles), essayez de réinstaller l'application et connectez-vous avec le WI-FI, généralement la synchronisation du système Android les données une fois toutes les 24 heures s'il y a des changements. Vous pouvez également essayer de spécifier vos propres règles de sauvegarde comme celle-ci.
et créez un fichier xml et placez-le dans le répertoire res / xml. A l'intérieur du fichier, ajoutez des règles avec les éléments et. L'exemple suivant sauvegarde toutes les préférences partagées à l'exception de device.xml.
J'espère que cela résoudra votre problème.
la source
Conformément au document de sauvegarde des données, vous devez créer SharedPreferencesBackupHelper et suivre ces étapes pour obtenir une sauvegarde SharedPreferences également besoin d' enregistrer les services de sauvegarde pour votre cas.
la source
Que cette procédure fonctionne pour vous. Essayez de sauvegarder et de restaurer les préférences partagées d'un utilisateur. Cela sauvegardera vos préférences sur n'importe quel stockage externe ou appareil.
Lorsque l'utilisateur désinstalle l'application, l'utilisateur doit la sauvegarder. Ajoutez une logique selon laquelle si le fichier est présent dans le stockage externe ou le périphérique, restaurez-le.
utilisez le code ci-dessous pour sauvegarder votre préférence.
utilisez le code ci-dessous pour restaurer les préférences
puis redémarrez votre application avant que ces préférences ne s'installent
la source
Vous n'avez pas activé les paramètres de restauration automatique comme indiqué dans le message de la console. Vous devez accéder aux paramètres système et l'activer. Après cela, la restauration pourrait fonctionner.
Paramètres -> Sauvegarde -> Restauration automatique.
BTW, le jeton que vous avez utilisé n'est pas correct. 1573806051616 est un horodatage au lieu du jeton. Le jeton doit apparaître comme ci-dessous:
Ici, le
XXXXXXXXXXXXXXXX
devrait être le jeton.la source
Pour tester la restauration, vous devez exécuter la commande ci-dessous sans supprimer votre application. La commande de restauration forcera l'arrêt de l'application, effacera ses données et effectuera la restauration, simulant ainsi la fonctionnalité d'Android AutoBackup:
TOKEN
est récupéré de lalogcat
commande lors de l'exécution de la commande de sauvegarde ou de ladumpsys backup
commande. Vous pouvez également vérifier ledumpsys backup
pour vérifier que la sauvegarde a été créée.Plus d'informations ici: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
la source
Une façon de procéder est la suivante (veuillez noter que ce n'est peut-être pas la meilleure façon, mais cela fonctionne!)
Avant de désinstaller l'application, reprenez-la. Ajoutez une logique selon laquelle si le fichier est présent dans le stockage externe , restaurez-le.
Utilisez le code suivant pour restaurer les préférences
REMARQUE : autorisation d'écriture et de lecture de stockage externe requise.
la source