Реализация
Перед реализацией необходимо зарегистрировать своё приложение непосредственно в Android Backup Service. Ключ полученный при регистрации используется в манифесте, см. ниже.
Самый простой вариант взаимодействия с BackupManager – это наследование от класса BackupAgentHelper.
В данном классе мы используем два хелпера:
- SharedPreferencesBackupHelper для бэкапа SharedPreferences
- FileBackupHelper для бэкапа файлов из внутреннего хранилища.
public class TheBackupAgent extends BackupAgentHelper { @Override public void onCreate() { // DatabaseHelper.DATABASE_NAME – константа с названием базы данных. 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 bm = new BackupManager(context); bm.dataChanged(); } }
Вы удивитесь, но в принципе это всё. Напоследок просто указываем путь к классу бэкап агента в манифесте и дополнительные атрибуты с говорящим названием. Также в meta-data прописывается ключ, полученный при регистрации приложения.
<application android:name=". MyApplication " android:allowBackup="true" android:restoreAnyVersion="true" android:backupAgent=".util.TheBackupAgent" <meta-data android:name="com.google.android.backup.api_key" android:value="AEdPqrEAAAAIDaYEVgU6DJnyJdBmU7KLH3kszDXLv_4DIsEIyQ" /> </application>
Поскольку в Android нет красивого решения определения остановки приложения, предлагаю, как один из ленивых путей, запрашивать бэкап на старте приложения.
public class MyApplication extends Application { @Override public void onCreate() { TheBackupAgent.requestBackup(this); } }
Тестирование.
Не забываем внимательно смотреть логи. При указании неверных путей к файлам или префам вы будете проинформированы.
Алгоритм достаточно простой:
- Ввели данные/настройки в приложение.
- Запрашиваем бэкап для приложения adb shell bmgr backup your.package.name.
- Запуск бэкап менеджера adb shell bmgr run.
- Удаляем, ставим заново, PROFIT.
Заключение.
По личным ощущениям и гуглению данный сервис работает стабильно не на всех девайсах, однако внедрение данного функционала почти не требует усилий и поэтому рекомендуется к использованию в приложениях с базой данной или SharedPreferences по умолчанию.
ссылка на оригинал статьи http://habrahabr.ru/post/226357/
Добавить комментарий