无法使用 Android 备份服务进行备份
Can't use backup with 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"
我没有看到关于未声明的 class FooBar 的错误,但在尝试备份时仍然看到 dataChanged but no participant pkg
。所以我猜这个错误与找不到我的备份代理有关。
一些建议:
在您的清单中,我认为备份代理的声明应该使用全名或 "dot" 简称:
android:backupAgent="com.example.project.CordovaBackupAgentHelper"
或
android:backupAgent=".CordovaBackupAgentHelper"
此外,您必须在清单中启用备份:
android:allowBackup="true"
话虽如此,我怀疑这些更改是否会使警告消息消失。我有一个备用代理,无法通过将这些声明更改为无效值来创建您看到的警告消息。
如果您正在使用 Google 备份传输,您是否已按照 Data Backup Guide 中的描述注册该服务并将密钥添加到您的清单中?
您是否尝试过使用 adb bmgr
工具触发备份操作以查看您的代理是否被调用而不顾警告消息?
所以我的问题是没有将属性放到正确的元素上:(
我有:
<manifest android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...
而不是:
<application android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper"
...
我正在尝试将备份服务与我的应用程序集成。在我拨打电话之前一切正常:
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"
我没有看到关于未声明的 class FooBar 的错误,但在尝试备份时仍然看到 dataChanged but no participant pkg
。所以我猜这个错误与找不到我的备份代理有关。
一些建议:
在您的清单中,我认为备份代理的声明应该使用全名或 "dot" 简称:
android:backupAgent="com.example.project.CordovaBackupAgentHelper"
或
android:backupAgent=".CordovaBackupAgentHelper"
此外,您必须在清单中启用备份:
android:allowBackup="true"
话虽如此,我怀疑这些更改是否会使警告消息消失。我有一个备用代理,无法通过将这些声明更改为无效值来创建您看到的警告消息。
如果您正在使用 Google 备份传输,您是否已按照 Data Backup Guide 中的描述注册该服务并将密钥添加到您的清单中?
您是否尝试过使用 adb bmgr
工具触发备份操作以查看您的代理是否被调用而不顾警告消息?
所以我的问题是没有将属性放到正确的元素上:(
我有:
<manifest android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...
而不是:
<application android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper"
...