Il backup di Android SharedPreferences non funziona

Sto facendo i miei compiti a casa su come sostenere SharedPreferences nella mia applicazione Android, soprattutto utilizzando la riflessione per mantenere la compatibilità all'indietro. Alless sto provando. Purtroppo, nessuno dei miei codici effettivamente finisce per creare un backup! Ciò include la forzatura dei comandi adb bmgr sull'emulatore come spiegato qui . Quindi mi chiedo se la comunità potrebbe forse aiutarmi e nel process di elaborare una migliore documentazione?

Ecco il mio codice. Per mantenere questo il più generico ansible per altri, chiamerò semplicemente la mia domanda Andy con un nome di pacchetto di com.example.andy .

  • Corda telefonica Cordova - Barra di stato nera sul fondo dopo fullscreen
  • Integrare un'applicazione Android (.apk) in un progetto Android esistente
  • Elenco delle autorizzazioni normali delle permessi Android e delle autorizzazioni pericolose nell'API 23?
  • Come creare e leggere in modo programmato le configurazioni WEP / EAP WiFi in Android?
  • Payload di notifiche remoti FCM per iOS e Android
  • Android che invia messaggi tra frammento e servizio
  • Manifesto di Android (estratto)

    <application ... android:backupAgent="com.example.andy.backupHelper" android:restoreAnyVersion="true"> ... <meta-data android:name="com.google.android.backup.api_key" android:value="GIVEN KEY GOES HERE" /> ... 

    backupHelper.java

    Nota: /data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml

     package com.example.andy; import android.app.backup.BackupAgentHelper; import android.app.backup.SharedPreferencesBackupHelper; public class BlinkyBackup extends BackupAgentHelper { static final String PREFS_FILE = "andy_preferences"; static final String BACKUP_KEY = "AndyPreferencesBackup"; public void onCreate() { SharedPreferencesBackupHelper backupHelper = new SharedPreferencesBackupHelper(this, PREFS_FILE); addHelper(BACKUP_KEY, backupHelper); } } 

    BackupAgentWrapper

     package com.example.andy; import android.app.backup.BackupManager; import android.content.Context; public class BackupAgentWrapper { private BackupManager wrappedInstance; static { try { Class.forName("android.app.backup.BackupManager"); } catch (Exception e) { throw new RuntimeException(e); } } public static void checkAvailable() {} public void dataChanged() { wrappedInstance.dataChanged(); } public BackupAgentWrapper(Context ctx) { wrappedInstance = new BackupManager(ctx); } } 

    Infine, i comandi per avviare un backup durante il periodo di esecuzione. Nella mia applicazione, questo codice viene eseguito da una class disponibile per la mia applicazione (non l'attività principale) che viene passata come un context alla creazione e quindi memorizzata nella variabile privata mContext.

     private void backupData() { boolean backupAgentAvailable = false; try { BackupAgentWrapper.checkAvailable(); backupAgentAvailable = true; } catch (Throwable t) { // really nothing to do } if(backupAgentAvailable) { BackupAgentWrapper backupWrapper = new BackupAgentWrapper(mContext); backupWrapper.dataChanged(); } } 

    Per riassumere, né la function precedente né i comandi riportti di seguito effettivamente sostengono alcun dato:

     $ adb shell bmgr enable true $ adb shell bmgr backup com.example.andy $ adb shell bmgr run 

  • Come allineare gli elementi nella barra di azione a sinistra?
  • Intestazione authorization authentication HttpClient HttpClient "nc" hard-coded
  • come get una window di dialogo personalizzata, come quella mostrata nell'image?
  • Come disegnare una linea all'interno di un tablelayout?
  • Android - Servizio non supportto: audio
  • Uso dei colors per il nuovo tema di progettazione del materiale in Android
  • One Solution collect form web for “Il backup di Android SharedPreferences non funziona”

    Nella tua attività di chiamata principale (la prima che inizia nell'applicazione), è necessario eseguire l'istanza di BackupManager :

     BackupManager mBackupManager = new BackupManager(getApplicationContext()); 

    Questo indicherà al backupmanager di cercare il file di backup e caricarlo.

    È necessario assicurarsi che il file preferenze sia il formato "packagename_preferences" ad esempio. andy_preferences. E usa lo stesso nome quando hai prima salvato le tue preferenze. (Molto importnte!)

    Dopo che l'attività delle impostazioni viene salvata tramite apply() o commit() , è necessario indicare a BackupManager che qualcosa è stato modificato, quindi includere immediatamente dopo:

     mBackupManger.dataChanged(); 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.