Mam problem z pobraniem wartości (na urządzeniu z Androidem 9.0) z Preferencji udostępnionych po ponownej instalacji aplikacji i po ustawieniu allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Zgodnie z tym: https://developer.android.com/guide/topics/data/autobackup
Wspólne preferencje powinny zostać przywrócone?
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();
- Zalogowałem się na swoje konto Gmail na telefonie (emulatorze) (API 27), a kiedy przechodzę do aplikacji Drive, kopii zapasowych, danych aplikacji, widzę 18 aplikacji, takich jak Youtube, Gmail itp., A także moją własną aplikację.
- Kiedy przechodzę do „Ustawienia> System> Kopia zapasowa”, widzę te same aplikacje i moją własną. Ładuję aplikację, kod sharedprefs jest wykonywany. Zamykam aplikację i usuwam ją z pamięci. A potem naciskam przycisk „Utwórz kopię zapasową teraz”:
Aby zweryfikować, widzę moją aplikację na liście i otrzymała kopię zapasową 0 minut temu:
Następnie usuwam i ponownie instaluję aplikację i oczekuję, że będą tam 2 wartości (Elena i 12). Ale są usuwane ...
Próbowałem również tego samego za pomocą wiersza polecenia, ale również nie działa: 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
- Usuń aplikację
- Zainstaluj ponownie aplikację i sprawdź, czy wartości SharedPreferences nadal tam są.
- Wartości zniknęły ...
Zachowanie wydaje się również różnić na urządzeniach Samsung z Samsung Cloud, ale na razie skupmy się na standardowym Androidzie.
AKTUALIZACJA:
To już nie działało, ponieważ obniżyłem wersję w build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Nawet z android:restoreAnyVersion="true"
tym AndroidManifest
działałoby tylko wtedy, gdy wersja nie została obniżona.
źródło
Odpowiedzi:
Domyślnie system Android wykonuje kopie zapasowe wszystkich danych domyślnych, jeśli urządzenie jest podłączone do sieci Wi-Fi (jeśli użytkownik urządzenia nie zdecydował się na tworzenie kopii zapasowych danych mobilnych), spróbuj ponownie zainstalować aplikację i połączyć się z WI-FI, zwykle synchronizacja systemu Android dane raz na 24 godziny, jeśli są jakieś zmiany. Możesz także spróbować określić własne reguły tworzenia kopii zapasowych w ten sposób.
i utwórz plik xml i umieść go w katalogu res / xml. Wewnątrz pliku dodaj reguły z elementami i. Poniższy przykład tworzy kopię zapasową wszystkich wspólnych preferencji oprócz device.xml.
Mam nadzieję, że rozwiąże to Twój problem.
źródło
Zgodnie z dokumentem dotyczącym tworzenia kopii zapasowych danych musisz utworzyć SharedPreferencesBackupHelper i wykonać następujące kroki, aby uzyskać kopię zapasową SharedPreferences, należy również zarejestrować usługi tworzenia kopii zapasowych w swojej sprawie
źródło
Niech ta procedura zadziała dla Ciebie. Spróbuj wykonać kopię zapasową i przywrócić współdzielone preferencje użytkownika. Spowoduje to utworzenie kopii zapasowej preferencji na dowolnym Zewnętrznym urządzeniu magazynującym lub urządzeniu.
Po odinstalowaniu aplikacji użytkownik powinien ją ponownie wykonać. Dodaj logikę, że jeśli plik jest obecny w pamięci zewnętrznej lub urządzeniu, przywróć go z powrotem.
użyj poniższego kodu, aby wykonać kopię zapasową swoich preferencji.
użyj poniższego kodu, aby przywrócić preferencje
następnie uruchom ponownie aplikację, zanim te preferencje zostaną uwzględnione
źródło
Nie włączono ustawień automatycznego przywracania, jak pokazano w komunikacie konsoli. Powinieneś przejść do ustawień systemu i włączyć go. Następnie przywrócenie może działać.
Ustawienia -> Kopia zapasowa -> Automatyczne przywracanie.
BTW, użyty token jest nieprawidłowy. 1573806051616 jest znacznikiem czasu zamiast tokena. Token powinien wyglądać jak poniżej:
Tutaj
XXXXXXXXXXXXXXXX
powinien być token.źródło
Aby przetestować przywracanie, musisz uruchomić poniższe polecenie bez usuwania aplikacji. Polecenie przywracania wymusi zatrzymanie aplikacji, wyczyszczenie danych i wykonanie przywracania, symulując w ten sposób funkcjonalność Android AutoBackup:
TOKEN
jest pobierany zlogcat
polecenia podczas uruchamiania polecenia tworzenia kopii zapasowej lub zdumpsys backup
polecenia. Możesz także sprawdzić,dumpsys backup
czy weryfikacja została utworzona.Więcej informacji tutaj: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
źródło
Można to zrobić w następujący sposób: (Uwaga, może nie być to najlepszy sposób, ale działa!)
Przed odinstalowaniem aplikacji wykonaj kopię zapasową. Dodaj logikę, że jeśli plik jest obecny w pamięci zewnętrznej , przywróć go z powrotem.
Użyj następującego kodu, aby przywrócić preferencje
UWAGA : Wymagane jest zezwolenie na zapis i odczyt pamięci zewnętrznej.
źródło