Сайт разработчика Александр Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Облачный бэкап данных при помощи Android Backup Service

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

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

Для начала следует зарегистрировать ваше приложение на странице Backup Service. Вам нужно согласиться с условиями использования и ввести имя пакета вашего приложения. Взамен вам выдадут ключ, который нужно поместить в секцию application манифеста.


<meta-data
    android:name="com.google.android.backup.api_key"
    android:value="ВашКлюч" />

А для самого тега application в атрибуте backupAgent нужно указать имя класса, который мы сейчас создадим.


<application
    android:name=". MyApplication "
    android:allowBackup="true"
    android:restoreAnyVersion="true"
    android:backupAgent=".MyBackupAgent"
</application>

Атрибут restoreAnyVersion не является обязательным.

Далее создаётся новый класс на основе BackupAgentHelper, в котором вы указываете, какие данные следует сохранить - базу данных, настройки.


package ru.alexanderklimov.test;

import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupManager;
import android.app.backup.FileBackupHelper;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.Context;

public class MyBackupAgent extends BackupAgentHelper {
	@Override
	public void onCreate() {
		// DatabaseHelper.DATABASE_NAME – константа с названием базы данных в классе DatabaseHelper
		FileBackupHelper fileBackupHelper = new FileBackupHelper(this,
				"../databases/" + DatabaseHelper.DATABASE_NAME);
		addHelper(DatabaseHelper.DATABASE_NAME, fileBackupHelper);
		
		// Через запятую указываем названия файлов, в которых
		// хранятся ваши настройки. Обратите внимание на последний параметр, в
		// файле под таким названием хранит данные 
		// PreferenceManager(PreferenceManager.getDefaultSharedPreferences(context))
		SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(
				this, SharedPreferenceHelper.PREFERENCES, getPackageName()
						+ "_preferences");
		addHelper("prefs", helper);
	}

	// метод для запроса бэкапа. Следует вызывать
	// метод всякий раз, когда данные изменились.
	public static void requestBackup(Context context) {
		BackupManager backupManager = new BackupManager(context);
		backupManager.dataChanged();
	}
}

Осталось где-нибудь в вашей активности определить место для вызова метода, когда меняются данные.


MyBackupAgent.requestBackup(this);

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

Кроме вспомогательного класса BackupAgentHelper можно использовать класс BackupAgent, если вам нужны дополнительные возможности.

В документации есть отдельная страница на эту тему - Data Backup | Android Developers

Реклама