如何实施Android的数据备份服务

时间:2016-02-18 20:07:28

标签: android

对于我的Android项目,我尝试遵循并实施Android开发者数据备份指南(http://developer.android.com/guide/topics/data/backup.html),但数据备份和还原不起作用。有人可以帮忙举例吗?

1 个答案:

答案 0 :(得分:2)

经过进一步调查,我找到了实施Android数据备份和恢复的步骤。他们是:

  1. 在Manifest xml文件中添加以下内容:
     一个。 android:allowBackup =“true”(这启用Android的数据备份服务)
     湾元数据android:name =" com.google.android.backup.api_key" android:value =“{您的Android备份服务的唯一注册码}”(您必须使用备份服务注册您的应用程序包名称。要生成密钥,请转到http://developer.android.com/google/backup/signup.html
     C。 android:backupAgent =“。MyBackupAgent”(这是实现您声明的备份代理类的类的名称)。注意1:名称的第一个字符是一个句号,用于简化定位“com.example.project.MyBackupAgent”。注意2:如果发生运行时异常(这可能会或可能不会发生,具体取决于您的项目结构),例如:java.lang.ClassNotFoundException:没有找到类“com.example.project.MyBackupAgent”然后我建议你反编译你的apk(在http://www.decompileandroid.com/上传你的apk包)并搜索MyBackupAgent的绝对路径并为android插入此路径:backupAgent =“{absolute path} .MyBackupAgent”
  2. 以下是具有备份支持的Manifest xml文件示例:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.project">  
    <application  android:allowBackup="true" android:backupAgent="md5f576d3976d691fac04b078d1718cab3.MyBackupAgent">
       <meta-data android:name="com.google.android.backup.api_key" >android:value="{Your unique Registration Key}" />
    </application> 
    
    1. 在项目中添加MyBackupAgent类。 BackupAgentHelper类为BackupAgent类提供了一个方便的包装器,可以最大限度地减少需要编写的代码量。在BackupAgentHelper中,您必须使用一个或多个&#34; helper&#34;对象,它自动备份和恢复某些类型的数据,因此您不需要实现onBackup()和onRestore()。 注意:Android目前提供备份助手,可以从SharedPreferences和内部存储备份和恢复完整文件。
    2. 这是MyBackupAgent类的Java SharedPreferenceBackupHelper示例:
          import android.app.backup.BackupAgentHelper;
          import android.app.backup.SharedPreferencesBackupHelper;
          import android.util.Log;

      public class MyBackupAgent extends BackupAgentHelper{
      
          static final  String PREFS = "myprefs";
          static final  String PREFS_BACKUP_KEY = "myprefs";
      
          @Override  
          public void onCreate() {  
              Log.i("MyFileBackupAgent", "****** Enter BACKUP CLASS *******");  
      
              SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);  
              addHelper(PREFS_BACKUP_KEY, helper);
      
              Log.i("MyFileBackupAgent", "****** Exit BACKUP CLASS ********");
      
          }
      
      }
      

      这是MyBackupAgent类的C#Xamarin FileBackupHelper示例:
          公共类MyBackupAgent:BackupAgentHelper
          {
           string myProtectData =&#34; File.bin&#34 ;;
           string myPersistentData =&#34; Data.bin&#34 ;;
           string myDBase =&#34; Database.db&#34 ;;

          public override void OnCreate()  
          {  
              Console.WriteLine ("****** Enter Backup Files Helpers *********");  
              base.OnCreate ();  
      
              try  
              {  
                  FileBackupHelper dbkh = new FileBackupHelper (this, myProtectData);  
                  this.AddHelper ("PROTECT_backup", dbkh);  
      
                  FileBackupHelper persisth = new FileBackupHelper (this, myPersistentData);  
                  this.AddHelper ("PERSIST_backup", persisth);  
      
                  FileBackupHelper dbh = new FileBackupHelper (this, myDBase);  
                  this.AddHelper ("DATABASE_backup", dbh);  
                  Console.WriteLine ("********* All 3 files backuped *********");  
              }  
              catch {  
                  Console.WriteLine ("******* Backup AddHelper Exception ERROR *********");  
              }  
              Console.WriteLine ("******** Exit Backup Files Helpers ********");  
          }  
      
      
          public override void OnBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState)  
          {  
              Console.WriteLine ("****** Override OnBackup called ******");  
              base.OnBackup(oldState, data, newState);  
          }  
      
          public override void OnRestore (BackupDataInput data, int appVersionCode, ParcelFileDescriptor newState)  
          {  
              Console.WriteLine ("****** Override OnRestore called ******");  
              base.OnRestore(data, appVersionCode, newState);  
          }  
      }   
      
      1. 要执行备份,您的代码应通过调用dataChanged()来发出备份请求。备份请求不会立即调用onBackup()方法。相反,备份管理器会等待适当的时间*,然后对自上次执行备份以来请求备份的所有应用程序执行备份。注意,只要在上次数据备份请求后的小时之间至少调用了一个DataChanged(),备份管理器服务就会每小时响应一次。
      2. 出于测试目的,可以使用Android SDK命令提示符工具执行即时备份。试试这些命令:
        确保启用数据备份:adb shell bmgr enable true
        要请求数据备份:adb shell bmgr备份your.package.name
        要启动数据备份:adb shell bmgr运行
        要卸载您的应用:adb uninstall your.package.name
        然后安装您的应用程序:adb install your.package.name

        1. 您的手机设备备份设置怎么样?确保已建立WiFi连接。此外,在设备设置下,确保&#34;备份我的数据&#34;和&#34;自动恢复&#34;已经过检查,您已输入有效的备份帐户电子邮件ID。

        2. 最后,要跟踪您的备份上传时间戳,请使用www.google.com/settings/dashboard(这是您的个人Google帐户,与您的Android手机设备备份设置中的Google帐户相匹配)