Реализация
Перед реализацией необходимо зарегистрировать своё приложение непосредственно в 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 по умолчанию.
This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.
Комментариев нет:
Отправить комментарий