Ich habe Probleme beim Abrufen von Werten (auf einem Android 9.0-Gerät) aus freigegebenen Einstellungen, nachdem ich die App neu installiert habe und allowBackup = true habe.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Demnach: https://developer.android.com/guide/topics/data/autobackup
Die gemeinsamen Einstellungen sollten wiederhergestellt werden?
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();
- Ich habe mich auf dem (Emulator-) Telefon (API 27) in meinem Google Mail-Konto angemeldet und sehe beim Aufrufen der Laufwerks-App, Backups, App-Daten 18 Apps wie Youtube, Google Mail usw. sowie meine eigene App.
- Wenn ich zu "Einstellungen> System> Backup" gehe, sehe ich dieselben Apps und auch meine eigene App. Ich lade die App, Sharedprefs-Code wird ausgeführt. Ich schließe die App und entferne sie aus dem Speicher. Und dann drücke ich die Schaltfläche "Jetzt sichern":
Zur Überprüfung kann ich meine App in der Liste sehen und sie wurde vor 0 Minuten gesichert:
Dann entferne und installiere ich die App neu und erwarte, dass die 2 Werte (Elena und 12) vorhanden sind. Aber sie werden gelöscht ...
Ich habe das auch über die Befehlszeile versucht, aber es funktioniert auch nicht: 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
- App entfernen
- Installieren Sie die App neu und prüfen Sie, ob die SharedPreferences-Werte noch vorhanden sind.
- Werte sind weg ...
Das Verhalten scheint sich auch auf Samsung-Geräten mit Samsung Cloud zu unterscheiden, aber jetzt konzentrieren wir uns auf Standard-Android.
AKTUALISIEREN:
Es funktionierte nicht mehr, weil ich die Version in build.gradle heruntergestuft habe:
build.gradle:
versionCode 70
versionName "1.6.1"
Auch mit android:restoreAnyVersion="true"
in AndroidManifest
würde es nur funktionieren, wenn die Version nicht herabgestuft wurde.
quelle
Antworten:
Standardmäßig sichert das Android-System alle Standarddaten, wenn das Gerät mit einem Wi-Fi-Netzwerk verbunden ist (wenn der Gerätebenutzer sich nicht für mobile Datensicherungen entschieden hat). Versuchen Sie, die App neu zu installieren und eine Verbindung mit WI-FI herzustellen Daten alle 24 Stunden einmal, wenn Änderungen vorhanden sind. Sie können auch versuchen, Ihre eigenen Regeln für die Sicherung wie folgt anzugeben.
Erstellen Sie eine XML-Datei und legen Sie sie im Verzeichnis res / xml ab. Fügen Sie in der Datei Regeln mit den Elementen und hinzu. Das folgende Beispiel sichert alle freigegebenen Einstellungen mit Ausnahme von device.xml.
Ich hoffe, es wird Ihr Problem lösen.
quelle
Gemäß dem Data Back-Dokument müssen Sie SharedPreferencesBackupHelper erstellen und diese Schritte ausführen, um eine SharedPreferences- Sicherung zu erreichen. Außerdem müssen Sie die Sicherungsdienste für Ihren Fall registrieren
quelle
Möge dieses Verfahren für Sie funktionieren. Versuchen Sie, die sharedPreferences eines Benutzers zu sichern und wiederherzustellen. Dadurch wird Ihre Präferenz auf einem externen Speicher oder Gerät gesichert.
Wenn der Benutzer die App deinstalliert, sollte er sie sichern. Fügen Sie eine Logik hinzu, die wiederherstellt, wenn eine Datei im externen Speicher oder auf dem Gerät vorhanden ist.
Verwenden Sie den folgenden Code, um Ihre Präferenz zu sichern.
Verwenden Sie den folgenden Code, um die Einstellungen wiederherzustellen
Starten Sie dann Ihre App neu, bevor diese Einstellungen wirksam werden
quelle
Sie haben die Einstellungen für die automatische Wiederherstellung nicht aktiviert, wie in der Konsolenmeldung angezeigt. Sie sollten zu den Systemeinstellungen gehen und diese aktivieren. Danach könnte die Restaurierung funktionieren.
Einstellungen -> Backup -> Automatische Wiederherstellung.
Übrigens ist das von Ihnen verwendete Token nicht korrekt. 1573806051616 ist ein Zeitstempel anstelle des Tokens. Das Token sollte wie folgt aussehen:
Hier
XXXXXXXXXXXXXXXX
sollte das das Zeichen sein.quelle
Um die Wiederherstellung zu testen, müssen Sie den folgenden Befehl ausführen, ohne Ihre App zu entfernen. Der Wiederherstellungsbefehl erzwingt das Stoppen der App, löscht die Daten und führt die Wiederherstellung durch, wodurch die Funktionalität des Android AutoBackup simuliert wird:
TOKEN
wirdlogcat
beim Ausführen des Sicherungsbefehls oder beimdumpsys backup
Befehl aus dem Befehl abgerufen . Sie können auch überprüfendumpsys backup
, ob das Backup erstellt wurde.Weitere Informationen finden Sie hier: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
quelle
Eine Möglichkeit, dies zu tun, ist wie folgt: (Bitte beachten Sie, dass dies möglicherweise nicht der beste Weg ist, aber es funktioniert!)
Starten Sie die App, bevor Sie sie deinstallieren. Fügen Sie eine Logik hinzu , die wiederherstellt , wenn eine Datei im externen Speicher vorhanden ist.
Verwenden Sie den folgenden Code, um die Einstellungen wiederherzustellen
HINWEIS : Schreib- und Leseberechtigung für externen Speicher erforderlich.
quelle