SharedPreferencesBackupHelper 自动恢复不起作用
SharedPreferencesBackupHelper auto restore doesn't work
我正在尝试使用 SharedPreferencesBackupHelper 将我的 SharedPreferences 值保存到云中。
AndroidManifest.xml
<application
android:allowBackup="true"
android:backupAgent=".DataBackupAgent"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIXMH86OqosQlXYuS0QbfyOaZT8fUadY1QUDzo2w" />
<activity
android:name=".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>
</application>
DataBackupAgent.java:
public class DataBackupAgent 扩展了 BackupAgentHelper {
public static final String PREFS = "data_prefs";
public static final String PREFS_BACKUP_KEY = "myprefs";
@Override
public void onCreate() {
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS_BACKUP_KEY, helper);
}
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backupManager = new BackupManager(this);
prefs = getSharedPreferences(DataBackupAgent.PREFS, Context.MODE_PRIVATE);
edit = prefs.edit();
text = (EditText)findViewById(R.id.editText);
String value = prefs.getString(DataBackupAgent.PREFS_BACKUP_KEY,"");
text.setText(value);
Button btnBackup = (Button)findViewById(R.id.button);
btnBackup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edit.putString(DataBackupAgent.PREFS_BACKUP_KEY,text.getText().toString());
edit.commit();
backupManager.dataChanged();
}
});
}
我的步数:
- 在 EditText 上写点东西,点击备份按钮
- 关闭应用程序并重新打开。保存的值将显示在 EditText
- 卸载应用程序并重新安装。保存的值根本不会显示在 EditText 中。
2015 年 2 月 27 日编辑:
我添加了以下代码来手动恢复:
backupManager.requestRestore(new RestoreObserver() {
@Override
public void restoreFinished(int error) {
super.restoreFinished(error);
String value = prefs.getString(DataBackupAgent.PREFS_BACKUP_KEY,"");
text.setText(value);
}
@Override
public void restoreStarting(int numPackages) {
super.restoreStarting(numPackages);
}
@Override
public void onUpdate(int nowBeingRestored, String currentPackage) {
super.onUpdate(nowBeingRestored, currentPackage);
}
});
遗憾的是没有调用回调函数。
这意味着返回或自动恢复根本不起作用。任何想法?谢谢
My steps:
1. Write something at the EditText, click Backup button
2. Close app and open again. The saved value will be shown in EditText
3. Uninstall the app and reinstall again. The saved value is not shown in EditText at all.
为了测试您的实施,还有其他与 bmgr
的使用相关的步骤,正如我们所见 here.
然而,几天前我实现了这个功能,并按照文档中的步骤使用真实设备 - Samsung SII - 自动恢复没有发生,但使用模拟器一切都很好。
Logcat
将显示所有操作输出详细信息。
IMO,Android 数据备份功能目前不可靠。我们可以看到一些关于实现问题的讨论here and .
希望对您有所帮助!
我正在尝试使用 SharedPreferencesBackupHelper 将我的 SharedPreferences 值保存到云中。
AndroidManifest.xml
<application
android:allowBackup="true"
android:backupAgent=".DataBackupAgent"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIXMH86OqosQlXYuS0QbfyOaZT8fUadY1QUDzo2w" />
<activity
android:name=".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>
</application>
DataBackupAgent.java:
public class DataBackupAgent 扩展了 BackupAgentHelper {
public static final String PREFS = "data_prefs";
public static final String PREFS_BACKUP_KEY = "myprefs";
@Override
public void onCreate() {
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS_BACKUP_KEY, helper);
}
}
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
backupManager = new BackupManager(this);
prefs = getSharedPreferences(DataBackupAgent.PREFS, Context.MODE_PRIVATE);
edit = prefs.edit();
text = (EditText)findViewById(R.id.editText);
String value = prefs.getString(DataBackupAgent.PREFS_BACKUP_KEY,"");
text.setText(value);
Button btnBackup = (Button)findViewById(R.id.button);
btnBackup.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
edit.putString(DataBackupAgent.PREFS_BACKUP_KEY,text.getText().toString());
edit.commit();
backupManager.dataChanged();
}
});
}
我的步数:
- 在 EditText 上写点东西,点击备份按钮
- 关闭应用程序并重新打开。保存的值将显示在 EditText
- 卸载应用程序并重新安装。保存的值根本不会显示在 EditText 中。
2015 年 2 月 27 日编辑:
我添加了以下代码来手动恢复:
backupManager.requestRestore(new RestoreObserver() {
@Override
public void restoreFinished(int error) {
super.restoreFinished(error);
String value = prefs.getString(DataBackupAgent.PREFS_BACKUP_KEY,"");
text.setText(value);
}
@Override
public void restoreStarting(int numPackages) {
super.restoreStarting(numPackages);
}
@Override
public void onUpdate(int nowBeingRestored, String currentPackage) {
super.onUpdate(nowBeingRestored, currentPackage);
}
});
遗憾的是没有调用回调函数。
这意味着返回或自动恢复根本不起作用。任何想法?谢谢
My steps: 1. Write something at the EditText, click Backup button 2. Close app and open again. The saved value will be shown in EditText 3. Uninstall the app and reinstall again. The saved value is not shown in EditText at all.
为了测试您的实施,还有其他与 bmgr
的使用相关的步骤,正如我们所见 here.
然而,几天前我实现了这个功能,并按照文档中的步骤使用真实设备 - Samsung SII - 自动恢复没有发生,但使用模拟器一切都很好。
Logcat
将显示所有操作输出详细信息。
IMO,Android 数据备份功能目前不可靠。我们可以看到一些关于实现问题的讨论here and
希望对您有所帮助!