2

アプリケーションにデータバックアップを実装しようとしています。Android 2.2プロジェクトをビルドし、Galaxys24.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()への呼び出しを1回だけ受け取ります。

注:アプリケーションの開発中に、bmgrツールを使用してバックアップを要求し、即時バックアップ操作を開始できます。

bmgrツールの手順については、http://developer.android.com/tools/help/bmgr.htmlを参照してください

保留中のすべてのバックアップ操作を強制的にすぐに実行するには、次を使用します。

adb shell bmgr run
于 2012-10-07T14:57:53.893 に答える