重新安装应用程序并设置allowBackup = true时,无法从共享的“首选项”中检索值(在Android 9.0设备上)。
<manifest ... >
...
<application android:allowBackup="true" ... >
...
</application>
</manifest>
据此:https : //developer.android.com/guide/topics/data/autobackup
共享的首选项应该恢复吗?
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();
- 我已经在(仿真器)电话(API 27)上登录了我的Gmail帐户,当转到“驱动器应用程序”,“备份”,“应用程序数据”时,我看到了18个应用程序,例如Youtube,Gmail等,还有我自己的应用程序。
- 当我转到“设置>系统>备份”时,我看到相同的应用程序,也看到了自己的应用程序。我加载了应用程序,执行了sharedprefs代码。我关闭该应用程序并将其从内存中删除。然后按“立即备份”按钮:
为了验证,我可以在列表中看到我的应用程序,并且它在0分钟前得到了备份:
然后,我删除并重新安装该应用程序,并期望其中有2个值(Elena和12)。但是它们被删除了...
我也通过命令行尝试了相同的操作,但也无法正常工作: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
- 移除应用
- 重新安装App并检查SharedPreferences值是否仍然存在。
- 价值观消失了...
在具有Samsung Cloud的Samsung设备上,此行为似乎也有所不同,但现在让我们集中讨论常规的Android。
更新:
它不再工作了,因为我在build.gradle中降级了版本:
build.gradle:
versionCode 70
versionName "1.6.1"
即使android:restoreAnyVersion="true"
在中,AndroidManifest
它也只有在版本未降级时才起作用。