문제

I'm trying to implement Data Backup into my application. I build Android 2.2 project, and run in Galaxy s2 4.0.3.

I try to use: BackupManagerTest to save preferences to the cloud

This is my code :

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...");
    }
}

My Activity

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();
            }
        });
    }
}

So MyBackupAgent never called. I don't know the reason.

도움이 되었습니까?

해결책

When you call backupManager.dataChanged(), it merely schedules your app for backup. It does not mean your backup helper is called right away.

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

You can request a backup operation at any time by calling dataChanged(). This method notifies the Backup Manager that you'd like to backup your data using your backup agent. The Backup Manager then calls your backup agent's onBackup() method at an opportune time in the future. Typically, you should request a backup each time your data changes (such as when the user changes an application preference that you'd like to back up). If you call dataChanged() several times consecutively, before the Backup Manager requests a backup from your agent, your agent still receives just one call to onBackup().

Note: While developing your application, you can request a backup and initiate an immediate backup operation with the bmgr tool.

Instructions for the bmgr tool can be found at: http://developer.android.com/tools/help/bmgr.html

To force all pending backup operations to run immediately, use:

adb shell bmgr run
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top