Android SharedPreferences Backup Funktioniert Nicht
Ich habe meine Hausaufgaben auf, wie backup-SharedPreferences in meinem Android Anwendung, besonders mit der spiegelung um die Abwärtskompatibilität zu wahren. Zumindest habe ich schon versucht. Leider hat keiner meiner code tatsächlich landet eine Sicherung anlegen! Dies beinhaltet zwingt adb bmgr Befehle auf dem emulator wie erklärt hier. So Frage ich mich, wenn die community könnte vielleicht mir helfen und in den Prozess zu kommen mit einigen besseren Dokumentation?
Hier ist mein code. Um diese so allgemein wie möglich für andere, ich werde rufen Sie einfach meine Bewerbung Andy mit einem Paket namens com.Beispiel.andy.
Android-Manifest (Auszug)
<application
...
android:backupAgent="com.example.andy.backupHelper"
android:restoreAnyVersion="true">
...
<meta-data
android:name="com.google.android.backup.api_key"
android:value="GIVEN KEY GOES HERE" />
...
backupHelper.java
Hinweis: /data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml
package com.example.andy;
import android.app.backup.BackupAgentHelper;
import android.app.backup.SharedPreferencesBackupHelper;
public class BlinkyBackup extends BackupAgentHelper {
static final String PREFS_FILE = "andy_preferences";
static final String BACKUP_KEY = "AndyPreferencesBackup";
public void onCreate() {
SharedPreferencesBackupHelper backupHelper = new SharedPreferencesBackupHelper(this, PREFS_FILE);
addHelper(BACKUP_KEY, backupHelper);
}
}
BackupAgentWrapper
package com.example.andy;
import android.app.backup.BackupManager;
import android.content.Context;
public class BackupAgentWrapper {
private BackupManager wrappedInstance;
static {
try {
Class.forName("android.app.backup.BackupManager");
}
catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void checkAvailable() {}
public void dataChanged() {
wrappedInstance.dataChanged();
}
public BackupAgentWrapper(Context ctx) {
wrappedInstance = new BackupManager(ctx);
}
}
Und schließlich, die Befehle zum einleiten einer Sicherung während der Laufzeit. In meiner Anwendung wird dieser code ausgeführt wird, von einer Klasse zur Verfügung, um meine Anwendung (nicht die Haupt-Tätigkeit), die übergeben wird diese als Kontext bei der Erstellung und Speicherung in die private variable mContext.
private void backupData() {
boolean backupAgentAvailable = false;
try {
BackupAgentWrapper.checkAvailable();
backupAgentAvailable = true;
}
catch (Throwable t) {
//really nothing to do
}
if(backupAgentAvailable) {
BackupAgentWrapper backupWrapper = new BackupAgentWrapper(mContext);
backupWrapper.dataChanged();
}
}
Zusammen zu fassen, weder der oben genannten Funktion noch die folgenden Befehle eigentlich backup aller Daten:
$ adb shell bmgr enable true
$ adb shell bmgr backup com.example.andy
$ adb shell bmgr run
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Ihrem Haupt-Aufruf-Aktivität (die erste, die beginnt in Ihrem app), die Sie benötigen, zu instanziieren
BackupManager
:Dieser wird Ihnen sagen, die backupmanager zu suchen für die backup-Datei und laden Sie es.
Müssen Sie sicherstellen, dass die preferences-Datei-format
"packagename_preferences"
zB. andy_preferences. Und den gleichen Namen verwenden, wenn Sie zuerst Ihre Einstellungen gespeichert. (Sehr wichtig!)Nach Ihren Einstellungen-Aktivität speichert über
apply()
odercommit()
müssen Sie sagenBackupManager
dass sich etwas geändert hat, so gehören sofort nach: