2015-07-10 5 views
1

Я пытаюсь интегрировать службу резервного копирования с моим приложением. Это все работает вплоть до того момента, как сделать вызов:Невозможно использовать резервную копию с помощью службы резервного копирования Android

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

я вижу следующее в моем LogCat:

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

Вот моя реализация BackupAgentHelperhttps://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"

Может ли кто-нибудь пролить свет на это?

Update

Я заметил, если бы я изменить свой манифест, чтобы android:backupAgent="FooBar" я не вижу никаких ошибок о необъявленном классе FooBar, но по-прежнему видит dataChanged but no participant pkg при попытке резервного копирования. Поэтому я предполагаю, что ошибка связана с невозможностью найти мой резервный агент.

ответ

0

Так что мой вопрос не укладывал атрибуты на правильный элемент :(

я имел:

<manifest android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...

Вместо:

<application android:backupAgent="com.cloakedninjas.cordova.plugins.BackupAgentHelper" ...

0

Несколько предложений:

В манифесте, я думаю, что декларация агента резервного копирования следует использовать либо полное имя или «точку» короткую форму:

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

или

android:backupAgent=".CordovaBackupAgentHelper" 

Кроме того, вы должны иметь резервное копирование включено в манифесте:

android:allowBackup="true" 

Сказав это, я сомневаюсь, что эти изменения заставят предупредительное сообщение исчезнуть. У меня есть агент резервного копирования, и я не могу создать предупреждающее сообщение, которое вы видите, изменив это объявление на недопустимые значения.

Если вы используете транспорт для резервного копирования Google, зарегистрировались ли вы для службы, как описано в Data Backup Guide, и добавили ключ к вашему манифесту?

Вы пытались вызвать операцию резервного копирования с помощью инструмента adb bmgr, чтобы узнать, вызван ли ваш агент, несмотря на предупреждение?

+0

Так что да , попробовали полное имя 'android: backupAgent =" com.cloakedninjas.cordova.plugins.CordovaBackupAgentHelper "и добавили' android: allowBackup' att ribute. Ключ находится в манифесте согласно указанному и несколько раз запускал 'adb shell bmgr run'. Но спасибо :) – cloakedninjas

+0

Просто интересно, нужно ли публиковать приложение для работы?Он еще не загружен в Google Play – cloakedninjas

+0

Также, если вы изменили свой ключ API на что-то неправильное, генерируют ли какие-либо предупреждения? – cloakedninjas