Как заставить FileBackupAgent работать? - PullRequest
0 голосов
/ 05 июня 2018

Я разрабатываю приложение с функцией резервного копирования.Я не могу использовать 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"
    />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...