如何强制运行FileBackupAgent?

时间:2018-06-05 15:06:55

标签: android android-studio

我正在开发具有备份功能的应用。我无法使用AutoBackup,因为我打算在KitKat设备上使用它,而自动备份仅适用于Android Marshmallow及以上版本。 所以我在Google备份上注册了我的应用程序,制作了我的BackupAgentHelper类,一切正常并正常工作。 这里唯一的疑问是(我无法在任何地方找到答案):有没有办法以编程方式立即运行备份? 我知道我可以使用

adb shell bmgr run
终端上的

,但是当用户点击BACKUP MY DATA时,我打算让我的应用程序执行此操作。如果没有连接,那么当Android决定将其留在队列中进行备份时,它是完全正常的,但如果设备在线,我真的需要应用程序立即将备份推送到互联网,所以用户可以卸载应用程序,如果他在那个时刻感觉就破坏了手机。 任何帮助将不胜感激。

编辑:我将我的KitKat物理设备连接到PC。我执行 adb shell bmgr list transports 这是输出,看起来没问题。

 * com.google.android.backup/.BackupTransportService
android/com.android.internal.backup.LocalTransport

然后我执行adb shell bmgr enabled这就是输出,看起来没问题。

Backup Manager currently enabled

然后我执行adb shell dumpsys backup,这是输出,看起来没问题。

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"
    />

0 个答案:

没有答案