2015-04-11 34 views
25

Desidero eseguire il backup dei dati in Android utilizzando la classe MyBackUpAgent che estende BackupAgentHelper. Sto usando SharedPreferences per archiviare i dati.BackUpAgentHelperClass non viene chiamato

Il mio codice è mainactivity:

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

La mia classe 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); 

    } 
} 

Il mio file 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> 

Finora ho provato con BMGR strumento per testare , sta eseguendo con successo con lo strumento bmgr. Tuttavia, durante i test su dispositivo ed emulatore Android, il backup non sta accadendo, né ripristinerà.

Inoltre, ho provato questo su Android 5.1, Android 4.2 e Android 4.0 ma ancora senza fortuna.

Mi sembra che la mia classe MyBackUpAgent non venga mai chiamata, e ho provato i breakpoint in MyBackUpAgent Class e l'ho convalidato. Non viene mai colpito.

Cosa sto sbagliando?

risposta

0

Nel file AndroidManifest.xml, provare a cambiare

android:backupAgent=".MyBackUpAgent" 

con il nome completo della classe, vale a dire

android:backupAgent="com.abh.utils.MyBackUpAgent" 

ma naturalmente cambia "com.abh.utils" con il nome di il pacchetto MyBackUpAgent.java è in.

+0

già fatto, ma ancora senza fortuna – abh22ishek

0

Ho avuto un problema simile e ho cercato ovunque senza fortuna. Finalmente trovato la soluzione. Sembra che l'agente di backup debba trovarsi nel pacchetto superiore senza punto precedente. Quindi provare a cambiare:

android:backupAgent=".MyBackUpAgent" 

a

android:backupAgent="MyBackUpAgent" 
1

Documenti citano Conditions For Backup Schedule:

  • L'utente ha permesso di backup sul dispositivo in Impostazioni> Backup & Reset.
  • Sono trascorse almeno 24 ore dall'ultimo backup.
  • Il dispositivo è inattivo e in carica.
  • Il dispositivo è connesso a una rete Wi-Fi. Se il dispositivo non è mai connesso a una rete Wi-Fi, il Backup automatico non si verifica mai.

Se il backup funziona con lo strumento bmgr ma non su un dispositivo/emulatore reale, è possibile che non si soddisfino tutte queste condizioni, pertanto il backup non si verifica mai.

0

assicuratevi di chiamare

adb shell bmgr run 

per simulare il backup.

Prova anche a utilizzare il trasporto locale per il backup in qualsiasi momento:

adb shell bmgr transport android/com.android.internal.backup.LocalTransport 
Problemi correlati