2

我正在尝试在我的应用程序中实施数据备份。我构建了 Android 2.2 项目,并在 Galaxy s2 4.0.3 中运行。

我尝试使用:BackupManagerTest将首选项保存到云端

这是我的代码:

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="net.amdroid.backuptest"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-permission android:name="android.permission.INTERNET" />

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="8" />

    <application
        android:allowBackup="true"
        android:backupAgent="net.amdroid.backuptest.MyBackupAgent"
        android:icon="@drawable/icon"
        android:label="@string/app_name" >
        <activity
            android:name=".BackupManagerTestActivity"
            android:label="@string/app_name" >
            <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="AEdPqrEAAAAI7_yf1xqlpltWZPZiKMHVlDgn3nMfgotjUweSUg" />
    </application>

</manifest>

MyBackupAgent.java

public class MyBackupAgent extends BackupAgentHelper {
    // The names of the SharedPreferences groups that the application maintains.  These
    // are the same strings that are passed to getSharedPreferences(String, int).
    static final String PREFS_TEST = "testprefs"; 

    // An arbitrary string used within the BackupAgentHelper implementation to
    // identify the SharedPreferenceBackupHelper's data.
    static final String MY_PREFS_BACKUP_KEY = "myprefs"; 

    // Simply allocate a helper and install it
    @Override
    public void onCreate() {
        SharedPreferencesBackupHelper helper =
                new SharedPreferencesBackupHelper(this, PREFS_TEST);
        addHelper(MY_PREFS_BACKUP_KEY, helper);
        Log.d("Test", "Adding backupagent...");
    }
}

我的活动

public class BackupManagerTestActivity extends Activity {

    private SharedPreferences prefs;
    private Editor edit;
    private BackupManager backupManager;
    private EditText text;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        backupManager = new BackupManager(getBaseContext());
        prefs = getSharedPreferences(MyBackupAgent.PREFS_TEST, Context.MODE_PRIVATE);
        edit = prefs.edit();

        text = (EditText) findViewById(R.id.editName);
        String nome = prefs.getString("KEY_NAME", "");
        text.setText(nome);

        Button button = (Button) findViewById(R.id.buttonSave);
        button.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                edit.putString("KEY_NAME", text.getText().toString());
                edit.commit();
                Log.d("Test", "Calling backup...");
                backupManager.dataChanged();
            }
        });
    }
}

所以MyBackupAgent从来没有打电话。我不知道原因。

4

1 回答 1

7

当您调用时backupManager.dataChanged(),它只是安排您的应用程序进行备份。这并不意味着您的备份助手会立即被调用。

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

您可以随时通过调用请求备份操作dataChanged()。此方法通知备份管理器您要使用备份代理备份数据。然后,备份管理器会在将来的适当时间调用备份代理的 onBackup() 方法。通常,您应该在每次数据更改时请求备份(例如,当用户更改您想要备份的应用程序首选项时)。如果您连续多次调用 dataChanged(),在备份管理器向您的代理请求备份之前,您的代理仍然只收到一次 onBackup() 调用。

注意:在开发应用程序时,您可以请求备份并使用 bmgr 工具立即启动备份操作。

bmgr 工具的说明可以在以下位置找到:http: //developer.android.com/tools/help/bmgr.html

要强制所有挂起的备份操作立即运行,请使用:

adb shell bmgr run
于 2012-10-07T14:57:53.893 回答