Сохранение настроек приложения при помощи Android Backup Service

Автор: | 02.09.2014

В ОС Андроид есть стандартный сервис сохранения данных приложения, иными словами - можно сохранить "все, что нажито не посильным трудом" в свою учетную запись на серверах 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);

На этом задача решена, если не считать, что не все йогурты одинаково полезны не все устройства вообще поддерживают такое сохранение настроек.

Иными словами, хочешь что-то сохранить - сделай это сам.

Если среди читателей есть люди знакомые с данной областью, прошу поделитесь опытом и примерами реализаций в комментариях.

 

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *