В ОС Андроид есть стандартный сервис сохранения данных приложения, иными словами – можно сохранить “все, что нажито не посильным трудом” в свою учетную запись на серверах Google. А потом при переезде на другое устройство или сбросе настроек на старом, восстановить всё своё добро. На Nexus 5 список данных для переезда впечатляет:
- Chrome (браузер)
- Gmail (почта)
- Google Keep (заметки)
- Google Play Книги
- Google Фото
- Play Музыка
- Аудиопоиск на Google Play
- Данные приложений
- Календарь
- Контакты
- Контакты Google+
- Мои треки
Нас интересует пункт Данные приложений, в них, в идеале, можно сохранить настройки любой программы, если она к этому готова. Если они были сохранены, то после переустановки программы ОС сама подставит сохранённые настройки на старое место. Таким образом, можно не доставать старого пользователя просьбами об отзыве на приложение и тому подобное.Как говорит документация ,данные будут храниться на “облаке” ( “cloud” storage).
Давайте реализуем такую возможность на работающем приложении напоминатель Wi-Fi паролей. Для реализации наших планов, нужно зарегистрировать приложение в Android Backup Service. Во время регистрации мы получим ключ (com.google.android.backup.api_key), который нужно прописать в манифест приложения (AndroidManifest.xml). Также в манифесте в разделе application нужно добавить такие строчки :
[cce lang=”xml” tab_size=”2″ no_links=”false”]
android:allowBackup=”true”
android:backupAgent=”com.rusdelphi.wifipassword.BackupAgent”
android:restoreAnyVersion=”true”
[/cce]
В первой строчке мы говорим, что данные приложения можно сохранять в прок.
Во второй – указываем класс наследник BackupAgentHelper, в котором реализуем само сохранение настроек.
Третий параметр не обязателен.
Создадим класс BackupAgent наследником от BackupAgentHelper :
[cce lang=”java” tab_size=”2″ no_links=”false”]
package com.rusdelphi.wifipassword;
import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupManager;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.Context;
public class BackupAgent extends BackupAgentHelper {
// The name of the SharedPreferences file
static final String PREFS = “PREFS”;
// A key to uniquely identify the set of backup data
static final String PREFS_BACKUP_KEY = “My_PREFS”;
@Override
public void onCreate() {
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(
this, PREFS);
addHelper(PREFS_BACKUP_KEY, helper);
}
// метод для запроса бэкапа. Следует вызывать
// метод всякий раз, когда данные изменились.
public static void requestBackup(Context context) {
BackupManager backupManager = new BackupManager(context);
backupManager.dataChanged();
}
}
[/cce]
Сохранять для восстановления можно практически все данные программы, например базы данных SQLite. В напоминателе Wi-Fi паролей мы базы данных не используем, поэтому достаточно сохранить SharedPreferences. Для нашего удобства был написан стандартный класс SharedPreferencesBackupHelper.
Он создается и добавляется под соответствующим ключом в очередь за сохранением (addHelper).
Больше от нас ничего не требуется, кроме как уведомлять BackupManager о том, что данные для сохранения изменились. Делать это можно из любого удобного для нас места, просто вызвав метод BackupAgent.requestBackup(this);
На этом задача решена, если не считать, что не все йогурты одинаково полезны не все устройства вообще поддерживают такое сохранение настроек.
Иными словами, хочешь что-то сохранить – сделай это сам.
Если среди читателей есть люди знакомые с данной областью, прошу поделитесь опытом и примерами реализаций в комментариях.