I would like to backup a value in SharedPreferences so that I can read out this value after a reinstall.
My code does not work and I do not know what is the mistake.
MyBackupAgent
package com.app.appname;
import android.app.backup.BackupAgentHelper;
import android.app.backup.BackupManager;
import android.app.backup.SharedPreferencesBackupHelper;
import android.content.Context;
public class MyBackupAgent extends BackupAgentHelper{
static final String PREFS_DISPLAY = "AppName";
private Context context;
static final String MY_PREFS_BACKUP_KEY = "keyToStore";
public MyBackupAgent(Context context){
this.context = context;
SharedPreferencesBackupHelper helper =
new SharedPreferencesBackupHelper(context, PREFS_DISPLAY);
addHelper(MY_PREFS_BACKUP_KEY, helper);
}
public void storeData(){
BackupManager backupManager = new BackupManager(context);
backupManager.dataChanged();
}
}
How I store the data:
...
SharedPreferences settings = getSharedPreferences("AppName", 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("keyToStore", true);
editor.commit();
new MyBackupAgent(this).storeData();
...
How I receive the data:
...
SharedPreferences settings = getSharedPreferences("AppName", 0);
boolean value = settings.getBoolean("keyToStore", false);
...
I also added the API in the Android Manifest:
<application ...>
<meta-data android:name="com.google.android.backup.api_key" android:value="xxxxxxxxxxxxxxxxxxxxxxxxxx" />
Do you have any idea what I am doing wrong and how it works? Does it really work?
Android stores Shared Preferences settings as XML file in shared_prefs folder under DATA/data/{application package} directory. The DATA folder can be obtained by calling Environment. getDataDirectory() .
Shared Preferences allow you to save and retrieve data in the form of key,value pair. In order to use shared preferences, you have to call a method getSharedPreferences() that returns a SharedPreference instance pointing to the file that contains the values of preferences.
Your backup agent class for SharedPreferences should be something like this:
public class MyPrefsBackupAgent extends BackupAgentHelper {
// The name of the SharedPreferences file
static final String PREFS = "user_preferences";
// A key to uniquely identify the set of backup data
static final String PREFS_BACKUP_KEY = "prefs";
// Allocate a helper and add it to the backup agent
@Override
public void onCreate() {
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this, PREFS);
addHelper(PREFS_BACKUP_KEY, helper);
}
}
Then, you must request a cloud backup (it will be done async) with something like:
import android.app.backup.BackupManager;
...
public void requestBackup() {
BackupManager bm = new BackupManager(this);
bm.dataChanged();
}
and you don't need to manually restore your SharedPreferences as they are automagically managed by the SharedPreferencesBackupHelper
class.
Besides your backup API key, don't forget to add your backup agent class in your manifest:
<application android:label="MyApplication"
android:backupAgent="MyBackupAgent">
More info about all this at http://developer.android.com/guide/topics/data/backup.html and http://developer.android.com/training/cloudsync/backupapi.html
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With