android - studio - No se está llamando a BackUpAgentHelperClass
backup user data traducir (5)
Asegúrate de llamar
adb shell bmgr run
para simular la copia de seguridad.
También intente utilizar el transporte local para realizar copias de seguridad en cualquier momento:
adb shell bmgr transport android/com.android.internal.backup.LocalTransport
Quiero hacer una copia de seguridad de los datos en Android usando la clase MyBackUpAgent que extiende BackupAgentHelper. Estoy usando SharedPreferences para almacenar datos.
Mi código de actividad principal es:
public class MainActivity extends Activity {
EditText inputtext;
TextView outputtext;
Button submit;
public static SharedPreferences sharedprefs;
static final String File_Name_Of_Prefrences ="godplay_preferences";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);
init();
sharedprefs=getSharedPreferences(File_Name_Of_Prefrences,MODE_PRIVATE);
System.out.println("value="+sharedprefs.getString("Input",""));
outputtext.setText(sharedprefs.getString("Input",""));
submit.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
populateUI();
}
});
}
public void populateUI()
{
String savedinput=inputtext.getText().toString();
System.out.println("savedinput="+savedinput);
outputtext.setText(savedinput);
sharedprefs=getSharedPreferences(File_Name_Of_Prefrences,MODE_PRIVATE);
Editor editor=sharedprefs.edit();
editor.putString("Input",inputtext.getText().toString());
editor.commit();
requestBackup();
}
private void init() throws ClassCastException
{
inputtext=(EditText) findViewById(R.id.edtInputText);
outputtext=(TextView) findViewById(R.id.txtOutputText);
submit=(Button) findViewById(R.id.btnSubmit);
}
public void requestBackup() {
BackupManager bm = new BackupManager(getApplicationContext());
bm.dataChanged();
}
}
Mi clase MyBackUpAgent:
public class MyBackUpAgent extends BackupAgentHelper{
static final String PREFS_BACKUP_KEY = "backup";
String key_string="Hello World";
@Override
public void onCreate() {
System.out.println("********************");
SharedPreferencesBackupHelper helper = new SharedPreferencesBackupHelper(this,MainActivity.File_Name_Of_Prefrences);
addHelper(PREFS_BACKUP_KEY, helper);
}
}
Mi archivo mainfest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.godplay"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:restoreAnyVersion="false"
android:backupAgent=".MyBackUpAgent"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.godplay.MainActivity"
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="AEdPqrEAAAAIhjloadYCTPUNo3yPsSX6LKmziiumZiQVlEEdBA" />
</application>
</manifest>
Hasta ahora he probado con la herramienta bmgr para probar, se está ejecutando correctamente con la herramienta bmgr. Sin embargo, en las pruebas en el dispositivo y emulador de Android, la copia de seguridad no se realiza ni se restaura.
Además, he probado esto en Android 5.1, Android 4.2 y Android 4.0, pero todavía no tengo suerte.
Me parece que a mi clase MyBackUpAgent nunca se la llama, y he intentado puntos de interrupción en MyBackUpAgent Class y la he validado. Nunca es golpeado.
¿Qué estoy haciendo mal?
En su archivo AndroidManifest.xml, intente cambiar
android:backupAgent=".MyBackUpAgent"
con el nombre completo de la clase, es decir,
android:backupAgent="com.abh.utils.MyBackUpAgent"
pero, por supuesto, cambiar "com.abh.utils" con el nombre del paquete MyBackUpAgent.java está en.
Los documentos mencionan las condiciones para el calendario de copia de seguridad:
- El usuario ha habilitado la copia de seguridad en el dispositivo en Configuración> Copia de seguridad y reinicio.
- Han transcurrido al menos 24 horas desde la última copia de seguridad.
- El dispositivo está inactivo y cargando.
- El dispositivo está conectado a una red wifi. Si el dispositivo nunca está conectado a una red wifi, la Copia de seguridad automática nunca se produce.
Si la copia de seguridad funciona para usted con la herramienta bmgr pero no en un dispositivo / emulador real, es posible que no cumpla con todas estas condiciones, por lo tanto, la copia de seguridad nunca se realizará.
Puede referirse al documento de desarrollador,
https://developer.android.com/guide/topics/data/backup.html#PerformingBackup
Una solicitud de copia de seguridad no genera una llamada inmediata a su método onBackup (). En su lugar, el Administrador de copia de seguridad espera un tiempo apropiado
puede utilizar la " herramienta bmgr " para iniciar una copia de seguridad inmediata al desarrollar su aplicación.
Tuve un problema similar y he buscado por todas partes sin suerte. Finalmente encontré la solución. Parece que el Agente de copia de seguridad debe estar en el paquete superior sin un punto anterior. Así que intenta cambiar:
android:backupAgent=".MyBackUpAgent"
a
android:backupAgent="MyBackUpAgent"