Tengo problemas para recuperar los valores (en un dispositivo Android 9.0) de las Preferencias compartidas después de reinstalar la aplicación y tener allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
De acuerdo con esto: https://developer.android.com/guide/topics/data/autobackup
Las preferencias compartidas deben ser restauradas?
SharedPreferences prefs = getSharedPreferences("TEST", MODE_PRIVATE);
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.
SharedPreferences.Editor editor = getSharedPreferences("TEST", MODE_PRIVATE).edit();
editor.putString("name", "Elena");
editor.putInt("idName", 12);
editor.apply();
- He iniciado sesión en mi cuenta de Gmail en el teléfono (emulador) (API 27) y al acceder a la aplicación Drive, copias de seguridad, datos de la aplicación, veo 18 aplicaciones como Youtube, Gmail, etc. y también mi propia aplicación.
- Cuando voy a "Configuración> Sistema> Copia de seguridad", veo las mismas aplicaciones y también mi propia aplicación. Cargo la aplicación, se ejecuta el código sharedprefs. Cierro la aplicación y la elimino de la memoria. Y luego presiono el botón "Respaldar ahora":
Para verificar, puedo ver mi aplicación en la lista y obtuvo una copia de seguridad hace 0 minutos:
Luego elimino y reinstalo la aplicación y espero que los 2 valores (Elena y 12) estén allí. Pero se borran ...
También intenté lo mismo a través de la línea de comandos, pero tampoco funcionó: https://developer.android.com/guide/topics/data/testingbackup.html#Preparing
adb shell
dreamlte:/ $ bmgr enabled
Backup Manager currently enabled
dreamlte:/ $ bmgr list transports
android/com.android.internal.backup.LocalTransport
com.google.android.gms/.backup.migrate.service.D2dTransport
* com.google.android.gms/.backup.BackupTransportService
dreamlte:/ $ bmgr backupnow my.package.name
Running incremental backup for 1 requested packages.
Package @pm@ with result: Success
Package nl.dagelijkswoord.android with progress: 1536/309248
Package nl.dagelijkswoord.android with result: Success
Backup finished with result: Success
dreamlte:/ $ dumpsys backup
Backup Manager is enabled / provisioned / not pending init
Auto-restore is disabled
No backups running
Last backup pass started: 1573804513565 (now = 1573806675410)
next scheduled: 1573819001046
...
1573806051616 : my.package.name
dreamlte:/ $ bmgr restore 1573806051616 my.package.name
No matching restore set token. Available sets:
35e84268c94b7d9c : SM-G950F
3a8e32898034f8af : SM-G950F
3e2610c4ea45fb96 : Nexus 5X
done
dreamlte:/ $ bmgr restore 35e84268c94b7d9c my.package.name
Scheduling restore: SM-G950F
restoreStarting: 1 packages
onUpdate: 0 = my.package.name
restoreFinished: 0
done
- Eliminar aplicaciones
- Vuelva a instalar la aplicación y compruebe si los valores de SharedPreferences siguen ahí.
- Los valores se han ido ...
El comportamiento también parece diferir en los dispositivos Samsung con Samsung Cloud, pero por ahora centrémonos en el stock de Android.
ACTUALIZAR:
Ya no funcionaba porque degradé la versión en build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Incluso con android:restoreAnyVersion="true"
el AndroidManifest
solo funcionaría cuando la versión no fuera degradada.
fuente
Respuestas:
De manera predeterminada, el sistema Android realiza una copia de seguridad de todos los datos predeterminados si el dispositivo está conectado a una red Wi-Fi (si el usuario del dispositivo no ha optado por las copias de seguridad de datos móviles), intente reinstalar la aplicación y conectarse con WI-FI, generalmente la sincronización del sistema Android datos una vez cada 24 horas si hay algún cambio. También puede intentar especificar sus propias reglas para copias de seguridad como esta.
y cree un archivo xml y póngalo en el directorio res / xml. Dentro del archivo, agregue reglas con los elementos y. El siguiente ejemplo respalda todas las preferencias compartidas, excepto device.xml.
Espero que resuelva tu problema.
fuente
De acuerdo con el documento de respaldo de datos, debe crear SharedPreferencesBackupHelper y seguir estos pasos para lograr una copia de respaldo de SharedPreferences también debe registrar los servicios de respaldo para su caso
fuente
Que este procedimiento funcione para usted. Intente hacer una copia de seguridad y restaurar las Preferencias compartidas de un usuario. Esto respaldará su preferencia a cualquier dispositivo o almacenamiento externo.
Cuando el usuario desinstala la aplicación, el usuario debe recuperarla. Agregue algo de lógica que si el archivo está presente en el Almacenamiento externo o dispositivo, restaure de nuevo.
use el código a continuación para respaldar su preferencia.
use el siguiente código para restaurar la preferencia
luego reinicie su aplicación antes de que estas preferencias se apoderen
fuente
No activó la configuración de Restauración automática como se muestra en el mensaje de la consola. Debe ir a la configuración del sistema y encenderlo. Después de eso, la restauración podría funcionar.
Configuración -> Copia de seguridad -> Restauración automática.
Por cierto, el token que usaste no es correcto. 1573806051616 es una marca de tiempo en lugar del token. El token debería aparecer de la siguiente manera:
Aquí, el
XXXXXXXXXXXXXXXX
debería ser el token.fuente
Para probar la restauración, debe ejecutar el siguiente comando sin eliminar su aplicación. El comando de restauración forzará la detención de la aplicación, borrará sus datos y realizará la restauración simulando así la funcionalidad de Android AutoBackup:
TOKEN
se recupera dellogcat
comando cuando se ejecuta el comando de copia de seguridad o deldumpsys backup
comando. También puede verificardumpsys backup
para verificar que se creó la copia de seguridad.Más información aquí: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
fuente
Una forma de hacerlo es la siguiente: (Tenga en cuenta que esta puede no ser la mejor manera, ¡pero funciona!)
Antes de desinstalar la aplicación, vuelva a realizarla. Agregue algo de lógica que, si el archivo está presente en el almacenamiento externo , restaure de nuevo.
Use el siguiente código para restaurar la preferencia
NOTA : Se requiere permiso de escritura y lectura de almacenamiento externo.
fuente