Saya mengalami masalah dalam mengambil nilai (pada perangkat Android 9.0) dari Preferensi yang dibagikan setelah saya menginstal ulang Aplikasi dan ketika memiliki allowBackup = true.
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
Menurut ini: https://developer.android.com/guide/topics/data/autobackup
Preferensi bersama harus dikembalikan?
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();
- Saya telah masuk ke akun Gmail saya di telepon (emulator) (API 27) dan ketika pergi ke Aplikasi Drive, Backup, App-data, saya melihat 18 Aplikasi seperti Youtube, Gmail dll. Dan juga Aplikasi saya sendiri.
- Ketika saya pergi ke "Pengaturan> Sistem> Cadangan" Saya melihat Aplikasi yang sama dan juga Aplikasi saya sendiri. Saya memuat Aplikasi, kode sharedprefs dieksekusi. Saya menutup Aplikasi dan menghapusnya dari memori. Dan kemudian saya tekan tombol "Cadangkan sekarang":
Untuk memverifikasi, saya dapat melihat Aplikasi saya di daftar dan mendapat cadangan 0 menit yang lalu:
Lalu saya menghapus dan menginstal ulang Aplikasi dan mengharapkan 2 nilai (Elena dan 12) ada di sana. Tapi mereka terhapus ...
Saya juga mencoba hal yang sama melalui baris perintah, tetapi juga tidak berhasil: 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
- Hapus Aplikasi
- Instal ulang Aplikasi dan periksa apakah nilai SharedPreferences masih ada.
- Nilai hilang ...
Perilaku ini juga tampaknya berbeda pada perangkat Samsung dengan Samsung Cloud, tetapi untuk sekarang mari kita fokus pada Android stock.
MEMPERBARUI:
Itu tidak berfungsi lagi karena saya menurunkan versi di build.gradle:
build.gradle:
versionCode 70
versionName "1.6.1"
Bahkan dengan android:restoreAnyVersion="true"
di AndroidManifest
dalamnya hanya akan berfungsi ketika versi tidak diturunkan.
sumber
Jawaban:
Secara default sistem android mencadangkan semua data default jika perangkat terhubung ke jaringan Wi-Fi (jika pengguna perangkat belum memilih untuk backup data seluler), cobalah untuk menginstal ulang aplikasi dan terhubung dengan WI-FI biasanya sinkronisasi sistem android data sekali dalam setiap 24 jam jika ada perubahan. Anda juga dapat mencoba menentukan aturan Anda sendiri untuk cadangan seperti ini.
dan buat file xml dan letakkan di direktori res / xml. Di dalam file, tambahkan aturan dengan elemen dan. Sampel berikut mencadangkan semua preferensi bersama kecuali device.xml.
Saya harap ini akan menyelesaikan masalah Anda.
sumber
Sesuai dokumen data cadangan , Anda perlu membuat SharedPreferencesBackupHelper dan ikuti langkah - langkah ini untuk mencapai pencadangan SharedPreferences juga perlu mendaftarkan layanan cadangan untuk kasus Anda
sumber
Semoga prosedur ini berhasil untuk Anda. Cobalah mencadangkan dan memulihkan Preferensi yang dibagikan pengguna. Ini akan mencadangkan preferensi Anda ke Penyimpanan atau perangkat Eksternal apa pun.
Saat pengguna menghapus aplikasi, pengguna harus mengambilnya kembali. Tambahkan beberapa logika bahwa jika file ada di Penyimpanan Eksternal atau perangkat, kembalikan kembali.
gunakan kode di bawah ini untuk membuat cadangan preferensi Anda.
gunakan kode di bawah ini untuk mengembalikan preferensi
kemudian restart aplikasi Anda sebelum prefrence ini akan bertahan
sumber
Anda tidak mengaktifkan pengaturan Auto-restore seperti yang ditunjukkan dalam pesan konsol. Anda harus pergi ke pengaturan sistem dan menyalakannya. Setelah itu, restorasi bisa bekerja.
Pengaturan -> Cadangan -> Pemulihan otomatis.
BTW, token yang Anda gunakan tidak benar. 1573806051616 adalah cap waktu alih-alih token. Token akan muncul seperti di bawah ini:
Di sini,
XXXXXXXXXXXXXXXX
seharusnya tokennya.sumber
Untuk menguji pemulihan, Anda harus menjalankan perintah di bawah ini tanpa menghapus aplikasi Anda. Perintah restore akan memaksa menghentikan aplikasi, menghapus datanya dan melakukan restore karenanya mensimulasikan fungsi Android AutoBackup:
TOKEN
diambil darilogcat
perintah saat menjalankan perintah cadangan atau daridumpsys backup
perintah. Anda juga dapat memeriksadumpsys backup
untuk memverifikasi bahwa cadangan telah dibuat.Info lebih lanjut di sini: https://developer.android.com/guide/topics/data/testingbackup.html#TestingRestore
sumber
Salah satu cara untuk melakukan ini adalah sebagai berikut, (Harap dicatat, ini mungkin bukan cara terbaik, tetapi berhasil!)
Sebelum menghapus instalan aplikasi, ambil kembali itu. Tambahkan beberapa logika bahwa jika file ada di Penyimpanan Eksternal , kembalikan kembali.
Gunakan kode berikut untuk mengembalikan preferensi
CATATAN : Diperlukan izin tulis dan baca penyimpanan eksternal.
sumber