使用 Android 备份服务备份我的 SharedPreferences
Using Android Backup Service to backup my SharedPreferences
我的目的是为我的应用程序实施备份服务,在进行更改时存储在云配置属性中,并在应用程序首次启动时检索它们。
但我遇到了一些问题:备份过程不正确。
我的 Android 清单包含以下内容:
<application
...
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:allowBackup="true"
android:backupAgent=".backup.BizkaimoveBackup">
...
<!-- Android Backup -->
<meta-data
android:name="com.google.android.backup.api_key"
android:value="--key--" />
<!-- Android Backup -->
BackupAgentHelper class 包含:
public class BizkaimoveBackup extends BackupAgentHelper {
/*
* Atributos
*/
private static String LOG_TAG = "BizkaimoveBackup";
private SharedPreferencesBackupHelper spbh;
/**
* El nombre del fichero de SharedPreferences: el mismo que hay en globales.
*/
private static String PREFS = "bizkaimovePrefs";
/**
* Una clave para identificar unequívocamente un conjunto de datos de backup
*/
private static final String PREFS_BACKUP_KEY = "myprefs";
/*
* Métodos
*/
@Override
public void onCreate() {
spbh = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS, spbh);
Log.d(LOG_TAG, "Añadiendo BackupAgent...");
}
}
为了在云中存储更改,我执行以下操作:
switchPreferenceIdiomaEs = (SwitchPreference) findPreference("pref_switch_idioma_es");
switchPreferenceIdiomaEu = (SwitchPreference) findPreference("pref_switch_idioma_eu");
switchPreferenceIdiomaEs.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
//newValue es boolean aquí
SharedPreferences sp = getActivity().getSharedPreferences("bizkaimovePrefs", Context.MODE_PRIVATE);
Editor spEditor = sp.edit();
spEditor.putBoolean("idiomaEsCastellano", (Boolean) newValue);
spEditor.putBoolean("idiomaEsEuskera", !((Boolean) newValue));
spEditor.commit();
switchPreferenceIdiomaEu.setChecked(!((Boolean) newValue));
BackupManager.dataChanged("com.ingartek.bizkaimove");
return true;
}
});
XML preferencias.xml 文件包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:key="bizkaimovePrefs"
android:persistent="true"
android:id="@+id/listaPrefs">
<PreferenceCategory
android:title="@string/config_idioma">
<!-- Un switch para euskera, otro para castellano -->
<SwitchPreference
android:key="pref_switch_idioma_eu"
android:title="@string/config_euskera"
android:switchTextOn="@string/config_euskera"
android:switchTextOff="@string/config_castellano"/>
<SwitchPreference
android:key="pref_switch_idioma_es"
android:title="@string/config_castellano"
android:switchTextOn="@string/config_castellano"
android:switchTextOff="@string/config_euskera"/>
</PreferenceCategory>
...
最后,在 HomeActivity 的 onCreate() 中,我执行以下操作:
BackupManager bm = new BackupManager(this);
bm.requestRestore(new RestoreObserver() {
@Override
public void restoreStarting(int numPackages) {
Toast.makeText(getApplicationContext(), "Empezando recuperación de backup...", Toast.LENGTH_SHORT).show();
super.restoreStarting(numPackages);
}
@Override
public void restoreFinished(int error) {
Toast.makeText(getApplicationContext(), "Recuperación de backup finalizada. Error: " + error, Toast.LENGTH_SHORT).show();
super.restoreFinished(error);
但是,执行此处描述的操作后 http://developer.android.com/guide/topics/data/backup.html#Testing 卸载我的应用程序后没有检索到任何数据。
我已经能够下载并测试这个 https://bitbucket.org/andreaskristensson/android-example-preference-fragment-and-backup-api/downloads 但它都不起作用。
我做错了什么?
提前致谢。
我终于意识到我的问题是什么了...
我创建了另一个文件,一些首选项存储在那里,其余的保存在默认首选项 XML 文件中。
所以备份管理员只与其中之一合作。
我的目的是为我的应用程序实施备份服务,在进行更改时存储在云配置属性中,并在应用程序首次启动时检索它们。
但我遇到了一些问题:备份过程不正确。
我的 Android 清单包含以下内容:
<application
...
android:label="@string/app_name"
android:theme="@style/AppTheme"
android:allowBackup="true"
android:backupAgent=".backup.BizkaimoveBackup">
...
<!-- Android Backup -->
<meta-data
android:name="com.google.android.backup.api_key"
android:value="--key--" />
<!-- Android Backup -->
BackupAgentHelper class 包含:
public class BizkaimoveBackup extends BackupAgentHelper {
/*
* Atributos
*/
private static String LOG_TAG = "BizkaimoveBackup";
private SharedPreferencesBackupHelper spbh;
/**
* El nombre del fichero de SharedPreferences: el mismo que hay en globales.
*/
private static String PREFS = "bizkaimovePrefs";
/**
* Una clave para identificar unequívocamente un conjunto de datos de backup
*/
private static final String PREFS_BACKUP_KEY = "myprefs";
/*
* Métodos
*/
@Override
public void onCreate() {
spbh = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS, spbh);
Log.d(LOG_TAG, "Añadiendo BackupAgent...");
}
}
为了在云中存储更改,我执行以下操作:
switchPreferenceIdiomaEs = (SwitchPreference) findPreference("pref_switch_idioma_es");
switchPreferenceIdiomaEu = (SwitchPreference) findPreference("pref_switch_idioma_eu");
switchPreferenceIdiomaEs.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
//newValue es boolean aquí
SharedPreferences sp = getActivity().getSharedPreferences("bizkaimovePrefs", Context.MODE_PRIVATE);
Editor spEditor = sp.edit();
spEditor.putBoolean("idiomaEsCastellano", (Boolean) newValue);
spEditor.putBoolean("idiomaEsEuskera", !((Boolean) newValue));
spEditor.commit();
switchPreferenceIdiomaEu.setChecked(!((Boolean) newValue));
BackupManager.dataChanged("com.ingartek.bizkaimove");
return true;
}
});
XML preferencias.xml 文件包含以下内容:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:key="bizkaimovePrefs"
android:persistent="true"
android:id="@+id/listaPrefs">
<PreferenceCategory
android:title="@string/config_idioma">
<!-- Un switch para euskera, otro para castellano -->
<SwitchPreference
android:key="pref_switch_idioma_eu"
android:title="@string/config_euskera"
android:switchTextOn="@string/config_euskera"
android:switchTextOff="@string/config_castellano"/>
<SwitchPreference
android:key="pref_switch_idioma_es"
android:title="@string/config_castellano"
android:switchTextOn="@string/config_castellano"
android:switchTextOff="@string/config_euskera"/>
</PreferenceCategory>
...
最后,在 HomeActivity 的 onCreate() 中,我执行以下操作:
BackupManager bm = new BackupManager(this);
bm.requestRestore(new RestoreObserver() {
@Override
public void restoreStarting(int numPackages) {
Toast.makeText(getApplicationContext(), "Empezando recuperación de backup...", Toast.LENGTH_SHORT).show();
super.restoreStarting(numPackages);
}
@Override
public void restoreFinished(int error) {
Toast.makeText(getApplicationContext(), "Recuperación de backup finalizada. Error: " + error, Toast.LENGTH_SHORT).show();
super.restoreFinished(error);
但是,执行此处描述的操作后 http://developer.android.com/guide/topics/data/backup.html#Testing 卸载我的应用程序后没有检索到任何数据。
我已经能够下载并测试这个 https://bitbucket.org/andreaskristensson/android-example-preference-fragment-and-backup-api/downloads 但它都不起作用。
我做错了什么?
提前致谢。
我终于意识到我的问题是什么了...
我创建了另一个文件,一些首选项存储在那里,其余的保存在默认首选项 XML 文件中。
所以备份管理员只与其中之一合作。