我正在开发具有备份功能的应用。我无法使用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"
/>