在 Android 中备份 SharedPreferences?
Posted
技术标签:
【中文标题】在 Android 中备份 SharedPreferences?【英文标题】:Backup SharedPreferences in Android? 【发布时间】:2013-09-05 21:03:18 【问题描述】:我想在 SharedPreferences 中备份一个值,以便在重新安装后读出该值。
我的代码不起作用,我不知道是什么错误。
我的备份代理
package com.app.appname;
import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupManager;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.Context;
public class MyBackupAgent extends BackupAgentHelper
static final String PREFS_DISPLAY = "AppName";
private Context context;
static final String MY_PREFS_BACKUP_KEY = "keyToStore";
public MyBackupAgent(Context context)
this.context = context;
SharedPreferencesBackupHelper helper =
new SharedPreferencesBackupHelper(context, PREFS_DISPLAY);
addHelper(MY_PREFS_BACKUP_KEY, helper);
public void storeData()
BackupManager backupManager = new BackupManager(context);
backupManager.dataChanged();
我如何存储数据:
...
SharedPreferences settings = getSharedPreferences("AppName", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("keyToStore", true);
editor.commit();
new MyBackupAgent(this).storeData();
...
我如何接收数据:
...
SharedPreferences settings = getSharedPreferences("AppName", 0);
boolean value = settings.getBoolean("keyToStore", false);
...
我还在 Android Manifest 中添加了 API:
<application ...>
<meta-data android:name="com.google.android.backup.api_key" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxx" />
你知道我做错了什么以及它是如何工作的吗?它真的有效吗?
【问题讨论】:
请告诉我你是否找到了解决方案 【参考方案1】:SharedPreferences 的备份代理类应该是这样的:
public class MyPrefsBackupAgent extends BackupAgentHelper
// The name of the SharedPreferences file
static final String PREFS = "user_preferences";
// A key to uniquely identify the set of backup data
static final String PREFS_BACKUP_KEY = "prefs";
// Allocate a helper and add it to the backup agent
@Override
public void onCreate()
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS_BACKUP_KEY, helper);
然后,您必须通过以下方式请求云备份(它将异步完成):
import android.app.backup.BackupManager;
...
public void requestBackup()
BackupManager bm = new BackupManager(this);
bm.dataChanged();
您无需手动恢复 SharedPreferences,因为它们由 SharedPreferencesBackupHelper
类自动管理。
除了备份 API 密钥,别忘了在清单中添加备份代理类:
<application android:label="MyApplication"
android:backupAgent="MyBackupAgent">
更多信息请访问http://developer.android.com/guide/topics/data/backup.html 和http://developer.android.com/training/cloudsync/backupapi.html
【讨论】:
我会尽快检查并报告结果。 有效吗?我已经正确设置了所有这些。还是不行。 其中String PREFS = "user_preferences";
不要忘记将 user_preferences 更改为您的实际首选项文件的名称。即getSharedPreferences("AppName", 0);
中定义的那个以上是关于在 Android 中备份 SharedPreferences?的主要内容,如果未能解决你的问题,请参考以下文章
android sharedpreferences文件可以设置大小吗