Android---使用備份API



本文譯自:http://developer.android.com/training/cloudsync/backupapi.html

當用戶採購一款新的設備或重置他們現有的設備時,他們可能期望Google Play在把應用程序恢復到設備上的過程中,把之前與應用程序關聯的數據也恢復到設備上。默認情況下,這種情況不會發生,並且應用程序中的所有的用戶操作履歷和設置都不會被恢復。

對於那些相對輕量級的數據(少於1Mb),如用戶設置、註釋、遊戲成績或其他的統計數據,備份API提供了一種輕量級的解決方案。本文討論如何把備份API集成到你的應用程序中,並使用備份API把數據恢復到一個新的設備上。

註冊Android的備份服務

本文需要使用Android的備份服務,它需要註冊。註冊地址:https://developer.android.com/google/backup/signup.html?hl=zh-CN&csw=1,註冊成功之後,該服務會被包裝在一個如下所示的XML標籤中:

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

你需要把這個標籤插入到Android的清單文件中。需要注意的是,每個備份鍵對應一個特定的包名,如果是不同的應用程序,就要註冊不同的備份鍵。

配置清單文件

使用Android的備份服務需要在你的應用程序清單文件中做兩件事。第一,要聲明用於備份代理的類,然後把上面的XML標籤作爲<Appliction>標籤的子元素添加到清單文件中。假設你的備份代理類是TheBackupAgent,那麼清單文件的如下:

<application android:label="MyApp"
             android:backupAgent="TheBackupAgent">
    ...
    <meta-data android:name="com.google.android.backup.api_key"
    android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ" />
    ...
</application>

編寫備份代理

創建備份代理的最容易的方法是繼承包裝類BackupAgentHelper類,創建這個輔助類過程很簡單,只需創建一個與清單文件聲明的備份代理的名稱相同類(本例中使用TheBackupAgent),並繼承BackupAgentHelper,然後重寫onCreate()方法。

onCreate()方法內部,創建一個備份輔助器,備份輔助器是備份某種類型數據的專用類。Android框架當前包含了兩種輔助器:FileBackupHelperSharePreferencesBackupHelper。創建輔助器,並把它指向要備份的數據之後,就要使用andHelper()方法把它添加給BackupAgentHelper類,這個方法還需要一個用於後續獲取數據的鍵名。大多數情況下,整個實現大約需要10行代碼,以下是一個備份高分值文件的例子:

import android.app.backup.BackupAgentHelper;
 import android.app.backup.FileBackupHelper;


 public class TheBackupAgent extends BackupAgentHelper {
    // The name of theSharedPreferences file
    static final String HIGH_SCORES_FILENAME = "scores";

    // A key to uniquelyidentify the set of backup data
    static final String FILES_BACKUP_KEY = "myfiles";

    // Allocate a helper andadd it to the backup agent
    @Override
    void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, HIGH_SCORES_FILENAME);
        addHelper(FILES_BACKUP_KEY,helper);
    }
}

爲了增加靈活性,FileBackupHelper類的構造器可以帶有可變數量的文件名。你可以很容易的同時備份高分值文件和遊戲進度文件,如:

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

備份設置也類似的簡單。使用與FileBackupHelper相同的方法創建一個SharedPreferencesBackupHelper輔助器。這時要用應用程序所使用的共享設置組來代替構造器中的文件名,示例如下:

import android.app.backup.BackupAgentHelper;
 importandroid.app.backup.SharedPreferencesBackupHelper;

 public class TheBackupAgent extends BackupAgentHelper {
     // The names of theSharedPreferences groups that the application maintains.  These
     // are the samestrings that are passed to getSharedPreferences(String, int).
     static final String PREFS_DISPLAY = "displayprefs";
     static final String PREFS_SCORES = "highscores";

     // An arbitrarystring used within the BackupAgentHelper implementation to
     // identify theSharedPreferencesBackupHelper's data.
     static final String MY_PREFS_BACKUP_KEY = "myprefs";

     // Simply allocate ahelper and install it
     void onCreate() {
         SharedPreferencesBackupHelper helper =
                 new SharedPreferencesBackupHelper(this, PREFS_DISPLAY,PREFS_SCORES);
         addHelper(MY_PREFS_BACKUP_KEY, helper);
     }
 }

在備份代理輔助器中,你可以添加很多備份輔助器的實例,但要記住,每種類型只需一個實例。即一個FileBackupHelper實例可用於處理所有需要備份的文件,一個SharedPreferencesBackupHelper實例可用於處理所有的需要備份的共享設置組。

請求備份
爲了請求備份,。只需創建一個BackupManager類的實例,然後調用它的dataChanged()方法。

import android.app.backup.BackupManager;
 ...

 public void requestBackup() {
   BackupManager bm = new BackupManager(this);
   bm.dataChanged();
 }

這個調用通知備份管理器有數據準備備份到雲端。在接下來的某個時刻,備份管理器會調用備份代理的onBackup()方法。無論數據在什麼時候發生改變,你都可以要求這個調用,而不用擔心網絡的過度使用。如果在備份發生之前,你申請了兩次備份,那麼備份只會發生一次。

從備份中恢復數據

通常,你不需要手動的要求恢復處理,當應用程序被安裝到一個設備上時,它會自動發生。但是,如果需要手動的觸發恢復操作,只需調用requestRestore()方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章