2

我想实现备份和恢复,但它不执行onBackup()方法。我在清单文件中的代码是

<application android:icon="@drawable/icon" android:label="@string/app_name"
        android:backupAgent="MyBackupAgent" android:restoreAnyVersion="true"
        android:allowBackup="true" android:enabled="true">
        <meta-data android:name="com.google.android.backup.api_key"
            android:value="AEdPqrEAAAAIMiLZ2_rMQFv6Huz3BYWpuxfVoK68Wk0CFMiXwA" />
        <activity android:name=".Splash" android:label="@string/app_name"
            android:theme="@android:style/Theme.NoTitleBar"
            android:screenOrientation="portrait">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
</application>

Activity我添加或更新我想要备份的任何项目时,我的代码是

BackupManager bm = new BackupManager(this);
bm.dataChanged();

MyBackupAgent我写的文件中

public class MyBackupAgent extends BackupAgent {

    @Override
    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
            ParcelFileDescriptor newState) throws IOException {
        // TODO Auto-generated method stub
        System.out.println("in MyBackupAgent");
    }

    @Override
    public void onRestore(BackupDataInput data, int appVersionCode,
            ParcelFileDescriptor newState) throws IOException {
        // TODO Auto-generated method stub

    }
}

但是在onBackup()方法中它不打印任何东西,所以我怎样才能确定它是否进入了 onbackup 方法?

4

5 回答 5

2

您是否尝试过在命令提示符下运行“adb shell bmgr run”?

这将迫使备份管理器完成其工作。

似乎dataChanged()安排了工作。但是除非如上所述强制,否则工作不会完成(永远等待)。

于 2011-10-06T14:17:37.187 回答
1

这可能是问题吗?:

只有备份管理器可以调用备份代理的 onBackup() 方法。每次您的应用程序数据发生更改并且您想要执行备份时,您必须通过调用 dataChanged() 请求备份操作(有关更多信息,请参阅请求备份)。备份请求不会立即调用您的 onBackup() 方法。相反,备份管理器会等待适当的时间,然后对自上次执行备份后请求备份的所有应用程序执行备份。

http://developer.android.com/guide/topics/data/backup.html#BackupAgent

于 2011-10-06T08:27:10.327 回答
0

我有完全相同的问题并添加

static 
{
    try
    {
            Class.forName("android.app.backup.BackupManager");
    }
    catch (Exception e)
    {
        throw new RuntimeException(e);
    }
}

在我的 MyBackupAgent 类中解决了这个问题。在此之前,我的 onBackup 从未被调用过。在偶然发现 Android Book Worm 之后,我终于弄明白了,这似乎是一个可行的例子。

我还在 AndroidManifest.xml 中更改了一行

android:backupAgent="MyBackupAgent"

android:backupAgent=".MyBackupAgent"

但我不确定这是否有任何作用。

这是帮助我的链接: ohloh.net code search for android:backupAgent=

另外:Android BookWorm 项目的 SVN 位置

于 2013-09-06T20:53:04.453 回答
0

我有同样的问题。如果我运行“adb shell bmgr run”,备份确实会成功,但是,我不能让 dataChanged() 做任何事情吗?我已经正确配置了所有内容,因为备份是通过 adb 命令运行的;真的要花很长时间来安排吗?我将我的 apk 复制到我的手机上,而 dataChanged() 在那里也什么也没做。我曾希望能够向用户报告备份成功,但这似乎是不可能的,因为它的调度是隐藏的(如果确实是这样的话)。

于 2011-10-28T03:39:21.787 回答
0

只是您可能想尝试的示例:

http://www.edumobile.org/android/android-development/backup-manager/

编辑:对不起,我误读了您的 XML,您可以尝试删除此标签Manifest

        <meta-data android:name="com.google.android.backup.api_key"
        android:value="AEdPqrEAAAAIMiLZ2_rMQFv6Huz3BYWpuxfVoK68Wk0CFMiXwA" />

@p/s:如果您可以共享代码,可能会有所帮助。

于 2011-10-06T08:30:14.173 回答