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

В ОС Андроид есть стандартный сервис сохранения данных приложения, иными словами — можно сохранить «все, что нажито не посильным трудом» в свою учетную запись на серверах 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 не будет опубликован. Обязательные поля помечены *