BackupAgentHelper从未在Android 2.2中调用过

Nam*_* Vu 2 android database-backups sharedpreferences android-backup-service

我正在尝试将数据备份实施到我的应用程序中.我构建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>
Run Code Online (Sandbox Code Playgroud)

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...");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的活动

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();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,MyBackupAgent从来不叫.我不知道原因.

mei*_*teg 6

当您拨打电话时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
Run Code Online (Sandbox Code Playgroud)