android - 无法备份我的应用程序数据库

标签 android android-backup-service

我有以下代码:

我的备份地点

public class MyBackupPlace extends BackupAgentHelper {
    static final String FILES_BACKUP_KEY = "myfiles";

    // Allocate a helper and add it to the backup agent
    @Override
    public void onCreate() {
        DbBackupHelper helper = new DbBackupHelper(this, DBHelper.DATABASE_NAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }

    /**
     * We want to ensure that the UI is not trying to rewrite the data file
     * while we're reading it for backup, so we override this method to
     * supply the necessary locking.
     */
    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
                         ParcelFileDescriptor newState) throws IOException {
        System.out.println("onBackup");
        synchronized (MainActivity.sDataLock) {
            super.onBackup(oldState, data, newState);
        }
    }

    /**
     * Adding locking around the file rewrite that happens during restore is
     * similarly straightforward.
     */
    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
                          ParcelFileDescriptor newState) throws IOException {
        synchronized (MainActivity.sDataLock) {
            System.out.println("onRestore");
            super.onRestore(data, appVersionCode, newState);
        }
    }
}

DBBackupHelper

public class DbBackupHelper extends FileBackupHelper {

    public DbBackupHelper(Context ctx, String dbName) {
        super(ctx, ctx.getDatabasePath(dbName).getAbsolutePath());
    }
}

数据库助手

public class DBHelper extends SQLiteOpenHelper {

    public static final String DATABASE_NAME = "testDB.db";
    ....
}

AndroidManifest

<activity
    android:name=".MainActivity"
    android:allowBackup="true"
    android:backupAgent="MyBackupPlace"
    android:restoreAnyVersion="true">
    ...    
</activity

<meta-data
    android:name="com.google.android.backup.api_key"
    android:value="..." />

我从 here 得到备份 key .

然后我尝试运行:

adb shell bmgr transport com.google.android.gms/.backup.BackupTransportService

adb shell bmgr backupnow my_package_name

它返回我:

Running backup for 1 requested packages.
Package @pm@ with result: Transport error
Backup finished with result: Transport error

如果我使用其他交通工具:

adb shell bmgr transport android/com.android.internal.backup.LocalTransport

adb shell bmgr backupnow my_package_name

它返回我:

Running backup for 1 requested packages.
Package @pm@ with result: Success
Backup finished with result: Backup is not allowed

我的代码可能有什么问题?

最佳答案

我需要在我的设备上启用一些设置:

Settings > Back up my data

关于android - 无法备份我的应用程序数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43335856/

相关文章:

android - lateinit property dispatchingAndroidInjector 还没有初始化

java - 将 RealmObject 扩展为单例的类

java - Android 自动备份不适用于不同的设备

android - 您如何测试Android 6.0的完整备份行为?

Android -- 从 JNI 获取 MEID

android - 自定义 ListVIew 未显示,显示的是空屏幕

Android路径跟随(谷歌地图)以编程方式

android - 错误 : Neither user 10066 nor current process has android. 权限.BACKUP

android - 寻找 BackupAgent(用于 sqlite 数据库)示例

Google 备份服务的共享首选项的 Android 备份不起作用