Использование службы резервного копирования Android для резервного копирования моих 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 содержит:
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 Prerencias.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>
...
И, наконец, в onCreate() HomeActivity я делаю следующее:
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 после удаления моего приложения данные не извлекаются.
Мне удалось загрузить и протестировать этот https://bitbucket.org/andreaskristensson/android-example-preference-fragment-and-backup-api/downloads но ни один из них не работает.
Что я делаю неправильно?
Заранее спасибо.
1 ответ
Наконец я понял, в чем заключалась моя проблема...
Я создал другой файл, и там были сохранены некоторые настройки, а остальные были сохранены в XML-файле настроек по умолчанию.
Таким образом, менеджер резервного копирования работал только с одним из них.