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
InformationsquelleAutor permafrost91 | 2011-03-01
Schreibe einen Kommentar