1

私の意図は、アプリケーションのバックアップ サービスを実装し、変更が行われたときにクラウド構成プロパティ内に保存し、アプリケーションの最初の起動時にそれらを取得することです。

しかし、いくつか問題があります。バックアップ プロセスが正しく行われていません。

私の Android マニフェストには次のものが含まれています。

<application
    ...
    android:label="@string/app_name"
    android:theme="@style/AppTheme" 
    android:allowBackup="true"
    android:backupAgent=".backup.BizkaimoveBackup">
        ...

        <!-- Android Backup -->
        <meta-data 
            android:name="com.google.android.backup.api_key" 
            android:value="--key--" />
        <!-- Android Backup -->

BackupAgentHelper クラスには以下が含まれます。

public class BizkaimoveBackup extends BackupAgentHelper {

    /*
     * Atributos
     */
    private static String LOG_TAG = "BizkaimoveBackup";
    private SharedPreferencesBackupHelper spbh;

    /**
     * El nombre del fichero de SharedPreferences: el mismo que hay en globales.
     */
    private static String PREFS = "bizkaimovePrefs";

    /**
     * Una clave para identificar unequívocamente un conjunto de datos de backup
     */
    private static final String PREFS_BACKUP_KEY = "myprefs";

    /*
     * Métodos
     */
    @Override
    public void onCreate() {
        spbh = new SharedPreferencesBackupHelper(this, PREFS);
        addHelper(PREFS, spbh);
        Log.d(LOG_TAG, "Añadiendo BackupAgent...");
    }

}

変更をクラウドに保存するには、次のようにします。

switchPreferenceIdiomaEs = (SwitchPreference) findPreference("pref_switch_idioma_es");
    switchPreferenceIdiomaEu = (SwitchPreference) findPreference("pref_switch_idioma_eu");

    switchPreferenceIdiomaEs.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {

        @Override
        public boolean onPreferenceChange(Preference preference, Object newValue) {
            //newValue es boolean aquí
            SharedPreferences sp = getActivity().getSharedPreferences("bizkaimovePrefs", Context.MODE_PRIVATE);
            Editor spEditor = sp.edit();
            spEditor.putBoolean("idiomaEsCastellano", (Boolean) newValue);
            spEditor.putBoolean("idiomaEsEuskera", !((Boolean) newValue));
            spEditor.commit();
            switchPreferenceIdiomaEu.setChecked(!((Boolean) newValue));

            BackupManager.dataChanged("com.ingartek.bizkaimove");

            return true;
        }
    });

XML の preferences.xml ファイルには、次のものが含まれています。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" 
    android:key="bizkaimovePrefs"
    android:persistent="true"
    android:id="@+id/listaPrefs">

    <PreferenceCategory
        android:title="@string/config_idioma">

        <!-- Un switch para euskera, otro para castellano -->
        <SwitchPreference 
            android:key="pref_switch_idioma_eu"
            android:title="@string/config_euskera"
            android:switchTextOn="@string/config_euskera"
            android:switchTextOff="@string/config_castellano"/>

        <SwitchPreference 
            android:key="pref_switch_idioma_es"
            android:title="@string/config_castellano"
            android:switchTextOn="@string/config_castellano"
            android:switchTextOff="@string/config_euskera"/>

    </PreferenceCategory>
    ...

そして最後に、HomeActivity の onCreate() 内で次のことを行います。

BackupManager bm = new BackupManager(this);
        bm.requestRestore(new RestoreObserver() {

            @Override
            public void restoreStarting(int numPackages) {
                Toast.makeText(getApplicationContext(), "Empezando recuperación de backup...", Toast.LENGTH_SHORT).show();
                super.restoreStarting(numPackages);
            }

            @Override
            public void restoreFinished(int error) {
                Toast.makeText(getApplicationContext(), "Recuperación de backup finalizada. Error: " + error, Toast.LENGTH_SHORT).show();
                super.restoreFinished(error);

ただし、ここで説明されているアクションを実行した後http://developer.android.com/guide/topics/data/backup.html#Testingアプリをアンインストールした後、データが取得されません。

このhttps://bitbucket.org/andreaskristensson/android-example-preference-fragment-and-backup-api/downloadsをダウンロードしてテストできましたが、どちらも機能していません。

私は間違って何をしていますか?

前もって感謝します。

4

1 に答える 1

1

最後に、私は自分の問題が何であるかに気づきました...

別のファイルを作成し、いくつかの設定をそこに保存し、残りはデフォルトの設定 XML ファイル内に保存しました。

そのため、バックアップ マネージャーはそのうちの 1 つだけを操作していました。

于 2016-02-11T12:02:39.910 に答える