BackUpAgentHelperClass没有被调用

我想使用扩展了BackupAgentHelper的MyBackUpAgent类在Android中备份数据。 我正在使用SharedPreferences来存储数据。

我的主要活动代码是:

public class MainActivity extends Activity { EditText inputtext; TextView outputtext; Button submit; public static SharedPreferences sharedprefs; static final String File_Name_Of_Prefrences ="godplay_preferences"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main2); init(); sharedprefs=getSharedPreferences(File_Name_Of_Prefrences,MODE_PRIVATE); System.out.println("value="+sharedprefs.getString("Input","")); outputtext.setText(sharedprefs.getString("Input","")); submit.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub populateUI(); } }); } public void populateUI() { String savedinput=inputtext.getText().toString(); System.out.println("savedinput="+savedinput); outputtext.setText(savedinput); sharedprefs=getSharedPreferences(File_Name_Of_Prefrences,MODE_PRIVATE); Editor editor=sharedprefs.edit(); editor.putString("Input",inputtext.getText().toString()); editor.commit(); requestBackup(); } private void init() throws ClassCastException { inputtext=(EditText) findViewById(R.id.edtInputText); outputtext=(TextView) findViewById(R.id.txtOutputText); submit=(Button) findViewById(R.id.btnSubmit); } public void requestBackup() { BackupManager bm = new BackupManager(getApplicationContext()); bm.dataChanged(); } } 

我的MyBackUpAgent类:

 public class MyBackUpAgent extends BackupAgentHelper{ static final String PREFS_BACKUP_KEY = "backup"; String key_string="Hello World"; @Override public void onCreate() { System.out.println("********************"); SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this,MainActivity.File_Name_Of_Prefrences); addHelper(PREFS_BACKUP_KEY, helper); } } 

我的mainfest.xml文件:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.godplay" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:restoreAnyVersion="false" android:backupAgent=".MyBackUpAgent" android:theme="@style/AppTheme" > <activity android:name="com.example.godplay.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIhjloadYCTPUNo3yPsSX6LKmziiumZiQVlEEdBA" /> </application> </manifest> 

到目前为止,我已经尝试用bmgr工具来testing,它正在使用bmgr工具成功执行。 但是,在Android设备和仿真器上进行testing时,备份不会发生,也不会恢复。

另外,我已经testing了这个在Android 5.1,Android 4.2和Android 4.0上,但仍然没有运气。

在我看来,我的MyBackUpAgent类永远不会被调用,我已经尝试了MyBackUpAgent类中的断点并validation它。 它从来没有受到打击。

我究竟做错了什么?

Solutions Collecting From Web of "BackUpAgentHelperClass没有被调用"

文档提及备份时间表的条件:

  • 用户在设备>备份和重置中启用了设备备份。
  • 自上次备份以来至less已经过了24小时。
  • 该设备闲置和充电。
  • 该设备已连接到Wi-Finetworking。 如果设备从未连接到WiFinetworking,则自动备份将不会发生。

如果使用bmgr工具进行备份而不是在真实的设备/模拟器上进行备份,则可能不符合所有这些条件,因此备份不会发生。

在您的AndroidManifest.xml文件中,尝试更改

 android:backupAgent=".MyBackUpAgent" 

与完全合格的类名,即

 android:backupAgent="com.abh.utils.MyBackUpAgent" 

但当然要用“MyBackUpAgent.java”包的名称来改变“com.abh.utils”。

我有一个类似的问题,search到处都是没有运气。 终于find了解决办法。 看来,BackupAgent需要在没有前面点的顶层包中。 所以尝试改变:

 android:backupAgent=".MyBackUpAgent" 

 android:backupAgent="MyBackUpAgent" 

你可以参考开发者文档,

https://developer.android.com/guide/topics/data/backup.html#PerformingBackup

备份请求不会立即调用您的onBackup()方法。 相反,备份pipe理器会等待适当的时间

您可以使用“ bmgr工具 ”来开始即时备份,开发您的应用程序。