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文件:

              

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

此外,我已经在Android 5.1,Android 4.2和Android 4.0上测试了这一点,但仍然没有运气。

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

我究竟做错了什么?

文档提到备份计划的条件:

  • 用户已在“设置”>“备份和重置”中启用了设备上的备份。
  • 自上次备份以来至少已经过了24小时。
  • 设备闲置并充电。
  • 设备连接到Wi-Fi网络。 如果设备从未连接到wifi网络,则永远不会发生自动备份。

如果备份对您使用bmgr工具但不适用于真实设备/仿真器,则可能无法满足所有这些条件,因此备份永远不会发生。

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

 android:backupAgent=".MyBackUpAgent" 

使用完全限定的类名,即

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

但当然使用MyBackUpAgent.java包的名称更改“com.abh.utils”。

我有类似的问题,到处搜寻都没有运气。 终于find了解决方案。 似乎BackupAgent需要位于顶部包中,没有前面的点。 所以尝试改变:

 android:backupAgent=".MyBackUpAgent" 

 android:backupAgent="MyBackUpAgent" 

你可以参考开发者文档,

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

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

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

一定要打电话

 adb shell bmgr run 

模拟备份。

也可以随时尝试使用本地传输进行备份:

 adb shell bmgr transport android/com.android.internal.backup.LocalTransport