2015-11-23 30 views
1

我已經設置了Android備份服務使用擴展BackupAgentHelper定製類我的應用程序......它基本上是這樣的:BackupAgent子還原,但沒有手動恢復

public class MyBackups extends BackupAgentHelper { 

    @Override 
    public void onCreate() { 
     Log.d("MyBackups", "creating backup class"); 
     this.addDefaultHelper(); 

     String defaultSharedPrefsName = this.getPackageName() + "_preferences"; 
     SharedPreferencesBackupHelper defaultPrefsHelper = new SharedPreferencesBackupHelper(this, defaultSharedPrefsName); 
     this.addHelper("default_prefs", defaultPrefsHelper); 
    } 

    @Override 
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { 
     Log.d("MyBackups", "backing up " + data); 
     super.onBackup(oldState, data, newState); 
    } 

    @Override 
    public void onRestore(BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState) throws IOException { 
     Log.d("MyBackups", "restoring"); 
     super.onRestore(data, appVersionCode, newState); 
     // post-processing code goes here 
    } 
} 

我有這是在清單文件中註冊的,如果我刪除並重新安裝應用程序,它會按預期運行,並顯示所有日誌消息。

但是,如果我手動申請恢復,像這樣...

BackupManager backupManager = new BackupManager(getApplicationContext()); 
int error = backupManager.requestRestore(
    new RestoreObserver() { 
     public void restoreStarting(int numPackages) { 
      Log.d("MyBackups", "restoreStarting"); 
     } 

     public void restoreFinished(int error) { 
      Log.d("MyBackups", "restoreFinished"); 
     } 

     public void onUpdate(int nowBeingRestored, String currentPackage) { 
      Log.d("MyBackups", "onUpdate"); 
     } 
    } 
); 
Log.d("MyBackups", "requestRestore result: " + error); 

... restoreStarting和restoreFinished被稱爲,並且錯誤的結果是0,但沒有的BackupAgentHelper方法被調用 - - 「創建備份類」和「恢復」日誌不會出現,並且我的後處理代碼不會運行。看起來好像一個手動requestRestore繞過我的自定義BackupAgentHelper子類。

還有什麼我需要連接到進行手動恢復工作,以同樣的方式作爲自動恢復?你有沒有試過,它是爲你工作?

+0

順便說一句,我不認爲這是http://stackoverflow.com/questions/8928669/onrestore-not-invoked-for-my-custom-backupagent重複的問題,因爲在我的情況下,自動恢復時重新安裝應用程序可以正常工作,並且只有使用requestRestore進行手動還原時出現問題。 – arlomedia

回答

0

這是一個老問題,但我可以只是今日做。我希望它能幫助有同樣問題的人。

你需要調用BackupManager dataChanged()來發送備份請求。

然後,對其進行測試,並開始踢的備份,你需要運行

adb shell bmgr run 

這將調用OnCreate中,OnBackup。

然後你運行backupManager.requestRestore,你的OnCreate後,OnRestore中的方法將被調用。

看看這裏的樣品,它正是這樣做的(當您單擊還原按鈕):

https://android.googlesource.com/platform/development/+/0b3758ea4e53f9bfd0b112eaa4a7dd7b7f4040f5/samples/BackupRestore?autodive=0%2F%2F%2F%2F%2F%2F%2F%2F%2F%2F

見FileHelperExampleAgent.java劑。