Estou tendo problemas para recuperar valores (em um dispositivo Android 9.0) de Preferências compartilhadas após reinstalar o aplicativo e ao permitir allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
De acordo com isso: https://developer.android.com/guide/topics/data/autobackup
As preferências compartilhadas devem 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();
- Eu entrei na minha conta do Gmail no telefone (emulador) (API 27) e, ao acessar o aplicativo Drive, backups, dados do aplicativo, vejo 18 aplicativos como Youtube, Gmail etc. e também meu próprio aplicativo.
- Quando vou a "Configurações> Sistema> Backup", vejo os mesmos aplicativos e também meu próprio aplicativo. Eu carrego o aplicativo, o código sharedprefs é executado. Fecho o aplicativo e o removo da memória. E então eu pressiono o botão "Backup now":
Para verificar, posso ver meu aplicativo na lista e ele foi salvo há 0 minutos:
Depois, removo e reinstale o aplicativo e espero que os 2 valores (Elena e 12) estejam lá. Mas eles são apagados ...
Também tentei o mesmo via linha de comando, mas também não estava funcionando: 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
- Remover aplicativo
- Reinstale o aplicativo e verifique se os valores de SharedPreferences ainda estão lá.
- Os valores se foram ...
O comportamento também parece diferir nos dispositivos Samsung com Samsung Cloud, mas por enquanto vamos nos concentrar no estoque do Android.
ATUALIZAR:
Não estava mais funcionando porque eu fiz o downgrade da versão em build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Mesmo com android:restoreAnyVersion="true"
no AndroidManifest
só funcionaria quando a versão não foi rebaixada.
fonte
Respostas:
Por padrão, o sistema Android faz backup de todos os dados padrão se o dispositivo estiver conectado a uma rede Wi-Fi (se o usuário do dispositivo não tiver ativado os backups de dados móveis), tente reinstalar o aplicativo e conectar-se ao WI-FI, geralmente a sincronização do sistema Android dados uma vez a cada 24 horas, se houver alguma alteração. Você também pode tentar especificar suas próprias regras para backup como este.
e crie um arquivo xml e coloque-o no diretório res / xml. Dentro do arquivo, adicione regras com os elementos e. O exemplo a seguir faz backup de todas as preferências compartilhadas, exceto device.xml.
Espero que isso resolva seu problema.
fonte
De acordo com o documento de backup de dados, você precisa criar o SharedPreferencesBackupHelper e siga estas etapas para obter o backup do SharedPreferences, além de registrar os serviços de backup do seu caso
fonte
Que este procedimento funcione para você. Tente fazer backup e restaurar as Preferências compartilhadas de um usuário. Isso fará o backup da sua preferência para qualquer armazenamento ou dispositivo externo.
Quando o usuário desinstala o aplicativo, ele deve fazer o backup. Adicione alguma lógica de que, se o arquivo estiver presente no armazenamento externo ou no dispositivo, restaure-o novamente.
use o código abaixo para fazer backup de sua preferência.
use o código abaixo para restaurar a preferência
em seguida, reinicie o aplicativo antes que essa preferência ocorra
fonte
Você não ativou as configurações de restauração automática, como mostrado na mensagem do console. Você deve ir para as configurações do sistema e ativá-lo. Depois disso, a restauração poderia funcionar.
Configurações -> Backup -> Restauração automática.
BTW, o token que você usou não está correto. 1573806051616 é um carimbo de data e hora em vez do token. O token deve aparecer como abaixo:
Aqui, o
XXXXXXXXXXXXXXXX
deve ser o token.fonte
Para testar a restauração, você precisa executar o comando abaixo sem remover o aplicativo. O comando restore forçará a parada do aplicativo, limpe seus dados e executará a restauração, simulando a funcionalidade do Android AutoBackup:
TOKEN
é recuperado dologcat
comando ao executar o comando backup ou do diretóriodumpsys backup
comando Além disso, você pode verificardumpsys backup
se o backup foi criado.Mais informações aqui: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
fonte
Uma maneira de fazer isso é a seguinte, (Observe que essa pode não ser a melhor, mas funciona!)
Antes de desinstalar o aplicativo, faça o backup dele. Adicione alguma lógica de que, se o arquivo estiver presente no armazenamento externo , restaure-o novamente.
Use o código a seguir para restaurar a preferência
NOTA : É necessária permissão de gravação e leitura de armazenamento externo.
fonte