无法使用Android备份服务进行备份

时间:2015-07-10 14:15:46

标签: java android android-backup-service

我正在尝试将备份服务与我的应用集成。直到我打电话的那一刻,这一切都在发挥作用:

BackupManager bm = new BackupManager(context);
bm.dataChanged();

我在Logcat中看到以下内容:

W/BackupManagerService﹕ dataChanged but no participant pkg='com.company.app' uid=10102

如果BackupAgentHelper https://gist.github.com/cloakedninjas/fe135cb04bf324e26b0c有帮助,这是我的实施方式......

public class CordovaBackupAgentHelper extends BackupAgentHelper {
    static final String FILE_NAME = "gameData.json";
    static final String FILES_BACKUP_KEY = "data_file";

    @Override
    public void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, FILE_NAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
                         ParcelFileDescriptor newState) throws IOException {

        Log.d(Backup.LOG_TAG, "Backup requested: " + oldState.toString() + " | "  + newState.toString());

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Backup requested: " + data.toString());
            super.onBackup(oldState, data, newState);
        }
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
                          ParcelFileDescriptor newState) throws IOException {

        synchronized (Backup.sDataLock) {
            Log.d(Backup.LOG_TAG, "Restore given: " + data.toString());
            super.onRestore(data, appVersionCode, newState);
        }
    }
}

我从未看到我的日志条目Backup requested。我已检查过我的Android清单,其中包含以下属性android:backupAgent="CordovaBackupAgentHelper"

任何人都可以对此有所了解吗?

更新

我注意到如果我将我的清单更改为android:backupAgent="FooBar"我没有看到未声明的类FooBar的错误,但在尝试备份时仍然看到dataChanged but no participant pkg。所以我的猜测是错误与无法找到我的备份代理有关。

1 个答案:

答案 0 :(得分:0)

一些建议:

在您的清单中,我认为备份代理的声明应使用全名或" dot"简短形式:

android:backupAgent="com.example.project.CordovaBackupAgentHelper"

android:backupAgent=".CordovaBackupAgentHelper"

此外,您必须在清单中启用备份:

android:allowBackup="true"

话虽如此,我怀疑这些变化会使警告信息消失。我有一个备份代理,并且无法通过将这些声明更改为无效值来创建您看到的警告消息。

如果您使用的是Google备份传输,请按照Data Backup Guide中的说明注册该服务,并将密钥添加到您的清单中吗?

您是否尝试使用adb bmgr工具触发备份操作,以查看是否在遇到警告消息时调用了代理?