Я разрабатываю приложение с функцией резервного копирования.Я не могу использовать AutoBackup, потому что я намерен использовать его на устройствах KitKat, а autobackup работает только с Android Marshmallow и выше.Поэтому я зарегистрировал свое приложение в Google Backup, создал класс BackupAgentHelper и все в порядке и работает.Единственное сомнение здесь (и я нигде не могу найти ответы): есть ли способ сделать резервное копирование ПРЯМО СЕЙЧАС программно?Я знаю, что могу использовать
adb shell bmgr run
на терминале, но я намерен сделать это в моем приложении, когда пользователь нажмет BACKUP MY DATA.Если соединения нет, то вполне нормально оставить его в очереди для резервного копирования, когда Android решит, но если устройство подключено к сети, мне действительно нужно приложение, чтобы сразу же отправить резервную копию в Интернет, чтобы пользователь мог удалить приложениеи уничтожить телефон, если он захочет в этот момент.Любая помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Я подключаю свое физическое устройство KitKat к ПК.Я выполняю adb shell bmgr list transports
, и это вывод, который выглядит нормально.
* com.google.android.backup/.BackupTransportService
android/com.android.internal.backup.LocalTransport
Затем я выполняю adb shell bmgr enabled
, и это вывод, который выглядит нормально.
Backup Manager currently enabled
ЗатемЯ выполняю резервное копирование dumpsys оболочки adb, и это вывод, который выглядит нормально.
Backup Manager is enabled / provisioned / not pending init
Auto-restore is enabled
Last backup pass started: 1528290895418 (now = 1528291313245)
next scheduled: -9223372036854525445
Available transports:
* com.google.android.backup/.BackupTransportService
destination: myaccount@gmail.com
intent: Intent { act=com.google.android.backup.SetBackupAccountActivity }
{blah blah blah, not my app anywhere}
android/com.android.internal.backup.LocalTransport
destination: Backing up to debug-only private cache
intent: null
Pending init: 0
Participants:
{blah blah blah, and my app down here}
uid: 10281
com.mydomain.myapp
Ancestral packages: none
Ever backed up: 12
{blah blah blah, not my app anywhere}
Pending backup: 18
{blah blah blah, and my app down here}
BackupRequest{pkg=com.mydomain.myapp}
Можно ли иметь такое отрицательное число после next scheduled
??
В любом случае, тогда явыполнить adb shell bmgr run
, и нет выходных данных.
И затем снова, adb shell dumpsys backup
, с почти таким же выходным сигналом, что и до выполнения bmgr run (он изменяет только эти первые строки)
Last backup pass started: 1528291863806 (now = 1528291916809)
следующий запланированный: -9223372036854548598
Я действительно не понимаю, резервное копирование это или нет.По-видимому, это не так, потому что, когда я запускаю adb uninstall com.mydomain.myapp
, а затем переустанавливаю его, он ничего не восстановит.И если я после переустановки запускаю adb shell bmgr restore com.mydomain.myapp
, вывод будет
Unable to restore package com.mydomain.myapp
done
Я не знаю, что делать.На самом деле, я полностью заблудился.
Это мой класс FileBackupAgent:
public class MyBackupAgent extends BackupAgentHelper{
private String FILENAME_OF_JSON_DATA;
static final String BACKUP_KEY = "JSONBackup";
@Override
public void onCreate(){
FILENAME_OF_JSON_DATA = this.getResources().getString( R.string.app_name ) + ".json";
FileBackupHelper fileBackupHelper = new FileBackupHelper( this, FILENAME_OF_JSON_DATA );
addHelper( BACKUP_KEY, fileBackupHelper );
}
Это мой манифест (важная часть)
<application
android:name=".MyAppName"
android:allowBackup="true"
android:backupAgent=".Utils.MyBackupAgent"
android:restoreAnyVersion="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".Activities.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="com.google.android.backup.api_key"
android:value="mykeyhere"
/>