问题标签 [android-backup-service]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android SharedPreferences 备份不起作用
我一直在做有关如何在我的 Android 应用程序中备份 SharedPreferences 的功课,尤其是使用反射来保持向后兼容性。至少我一直在努力。不幸的是,我的代码实际上都没有创建备份!这包括在模拟器上强制执行adb bmgr命令,如此处所述。所以我想知道社区是否可以帮助我并在此过程中提供一些更好的文档?
这是我的代码。为了使其对其他人尽可能通用,我将简单地使用包名com.example.andy调用我的应用程序Andy。
Android 清单(摘录)
备份助手.java
注意:/data/data/com.example.andy/shared_prefs/com.example.andy_preferences.xml
BackupAgentWrapper
最后,在运行时启动备份的命令。在我的应用程序中,此代码从我的应用程序(不是主要活动)可用的类中运行,该类在创建时作为上下文传递,然后存储在私有变量 mContext 中。
总而言之,上面的函数和下面的命令实际上都没有备份任何数据:
android - Android 备份/恢复:如何备份内部数据库?
我已经实现了BackupAgentHelper
使用提供FileBackupHelper
的备份和恢复我拥有的本机数据库。这是您通常与它一起使用的数据库ContentProviders
,它位于/data/data/yourpackage/databases/
.
有人会认为这是一种常见的情况。但是,文档并不清楚该怎么做:http: //developer.android.com/guide/topics/data/backup.html。没有BackupHelper
专门针对这些典型数据库的。因此,我使用了FileBackupHelper
.db 文件,将其指向“ /databases/
”中的我的 .db 文件,在我的 .db 操作(例如db.insert
)周围引入了锁ContentProviders
,甚至尝试在/databases/
之前创建“”目录,onRestore()
因为它在安装后不存在。
SharedPreferences
过去,我已经在不同的应用程序中成功实施了类似的解决方案。但是,当我在 emulator-2.2 中测试我的新实现时,我看到正在LocalTransport
从日志中执行备份,以及正在执行(和onRestore()
调用)恢复。然而,永远不会创建 db 文件本身。
请注意,这一切都是在安装之后,在首次启动应用程序之前,在执行恢复之后。除此之外,我的测试策略基于http://developer.android.com/guide/topics/data/backup.html#Testing。
另请注意,我不是在谈论我自己管理的一些 sqlite 数据库,也不是在谈论备份到 SD 卡、自己的服务器或其他地方。
我确实在文档中看到了关于建议使用自定义数据库的提及,BackupAgent
但它似乎并不相关:
但是,如果需要,您可能希望直接扩展 BackupAgent: * 备份数据库中的数据。如果您有一个 SQLite 数据库要在用户重新安装您的应用程序时恢复,您需要构建一个自定义 BackupAgent,它在备份操作期间读取适当的数据,然后创建您的表并在恢复操作期间插入数据。
请澄清一些。
如果我真的需要自己做到 SQL 级别,那么我担心以下主题:
打开数据库和事务。我不知道如何在我的应用程序工作流程之外从这样的单例类中关闭它们。
如何通知用户正在进行备份并且数据库已锁定。这可能需要很长时间,所以我可能需要显示一个进度条。
如何在还原时执行相同操作。据我了解,恢复可能发生在用户已经开始使用应用程序(并将数据输入数据库)时。因此,您不能假设只将备份数据恢复到位(删除空数据或旧数据)。您必须以某种方式加入它,对于任何重要的数据库来说,由于 id 的原因,这是不可能的。
如何在还原完成后刷新应用程序,而不会让用户卡在某个 - 现在 - 无法到达的点。
我可以确定数据库已经在备份或恢复时升级了吗?否则,预期的架构可能不匹配。
android - Android 备份服务 - 备份 HTC 设备中的联系人并在 HTC Desire2 上恢复
我有一个用例,我需要从一台设备(HTC magic)备份联系人并在另一台设备(HTC Desire2)上恢复。
我尝试使用Android Backup API,但在测试过程中我发现我们无法在不同的设备 (HTC Desire2) 上恢复数据。但我能够成功恢复同一设备上的数据(HTC 魔术)。
几个查询:
有没有办法可以在不同的设备上恢复数据?
我想显式调用
requestRestore()
BackupManager 的 API,但是当我调用 API 时,SecurityException
即使我android.permission.BACKUP
在清单中有权限,它也会抛出。我们是否需要使用平台证书签署应用程序?
android - 还原期间备份代理签名不匹配
[编辑] 从我添加的所有信息来看,这似乎是由于我的应用程序将自身注册为同一 UID 下的新应用程序,尽管在同一个 apk 中是相同的构建。任何从哪里开始修复的想法将不胜感激
我已经BackupAgent
使用 Helper 类在我的应用程序中实现了一个,因为我只想备份一个共享的首选项文件。
它似乎正在做它的备份调用。如果我在应用程序执行 a 之后执行“bmgr run” dataChanged()
,我会在 logcat 中得到以下信息:
但是,即使立即完成,执行“bmgr restore”操作也会在 logcat 中产生以下结果:
恢复的控制台输出是:
有任何想法吗?这显然是相同的版本和签名,因为我没有卸载/擦除/任何东西。我都注册了备份服务,并且密钥正确,等等。
编辑:它似乎作为调试密钥签名的构建工作正常,但在导出的、混淆的、zipaligned 发布密钥签名的 apk 上失败。如果我试图将数据从调试版本恢复到发布版本中,那对我来说是有意义的,但我不是。
edit2:尝试更改助手名称等,但我仍然得到相同的行为。调试密钥签名的 apk 完美运行,可以备份、卸载、重新安装并自动恢复。每次发布密钥签名的 apk 都会这样做。尽管只有一个内部函数调用,但我仍然有点担心使用不同 @ 号码的重复备份调用。但是,调试器也这样做,因此不能完全如此。
dumpsys 备份的输出显示我的包四次...
编辑3:卸载和重新安装始终在同一UID下添加我的应用程序的新实例。它是来自同一个 apk 的同一个应用程序的相同版本,但它只是在该列表中不断创建自己的新实例。这是正确的行为吗?查看BackupManager
源代码后,似乎(如果我没看错的话)在调试模式下,管理器并不真正关心签名,这可能就是它运行正常的原因。
java - Android应用程序备份和恢复?
对于我正在创建的应用程序,我希望用户能够备份他们的应用程序数据(例如到 SD 卡)。我所说的应用程序数据是首选项和 SQLite 数据库。我还想让恢复数据成为可能。
BackupManager 可以做到这一点吗?如果是的话,谁能给我一个简单的例子。
android - Android 将共享首选项备份到 Google 备份服务不起作用
我已经研究并遵循了如何让我的 android 应用程序将数据备份到谷歌备份,因此如果用户丢失手机或升级到新手机,他们不会丢失数据。但是,当我对其进行测试时(通过自己使用该应用程序,然后卸载并重新安装),没有恢复任何数据。这就是我所做的。也许有人可以找出问题所在。
- 向谷歌申请了备份密钥
将以下代码放在清单文件中(代替键,我确实添加了键值,并且对于 packageName,我使用了我的应用程序包名称)
/li>MyPrefsBackup
使用以下代码创建类。我要备份的共享首选项文件的名称称为 UserDB。至于PREFS_BACKIP_KEY
,我只是将其称为首选项。据我了解,这与清单文件中的密钥不同。
代码:
添加
BackupManager mBackupManager = new BackupManager(this);
在我的主类中,我在下一步中调用备份管理器最后,在我的主程序中,我
/li>backupHelper
通过以下行调用何时更改数据:
任何帮助深表感谢。
android - 整个 SharedPreferences 文件的 Android 备份
我一直在尝试在我的 Android 应用程序中备份我的 sharedpreferences 文件,但到目前为止还没有。我正在使用开发人员指南中的简单 Google 代码。下面是MyPrefsBackup
该类的代码。
我想我终于意识到,PREFS_BACKUP_KEY
实际上必须是我存储数据的特定键。我只是使用“prefs”,所以我认为这就是为什么没有备份数据的原因。但是,我在SharedPreferences
文件中存储了相当多的数据,所以如何在SharedPreferences
不指定每个单独密钥的情况下继续保存整个文件。(一些键是由应用程序生成的,所以我什至不知道它们是否正在使用,直到用户输入他们的数据)。
我想知道有没有办法告诉BackupHelper
班级备份整个SharedPreferences
文件?
android - 无法调用 BackupAgentHelper 的 onBackup() 方法
我正在上课,它需要备份数据并恢复相同的数据。我参考了 api demos 中给出的示例。但它根本不起作用。
有人可以帮我解决这个问题吗?
安卓清单.xml
我的活动.class
MyBackupAgent.class
android - 从 Android Market 重新安装时无法让 BackupAgent 工作
我已经BackupAgentHelper
根据文档实现了,包括向后兼容 1.6,以备份我所有的SharedPreferences
. 在模拟器 Android 2.2 中测试它以及在我的设备上运行时,它运行得很好,该设备通过 USB 运行库存的 Android 2.3.3。在这两个测试用例中,我都会发出:adb shell bmgr run
,它会触发备份。
但是,当从 Android Market 重新安装我的应用程序时,一切SharedPreferences
都消失了。文档说,dataChanged()
在调用之后,“备份管理器然后在未来的适当时间调用你的备份代理的 onBackup() 方法”。很好,但有谁知道是什么让系统实际进行备份?我怀疑这在我的情况下没有发生。
文档说:“如果使用设备,请打开系统设置,选择隐私,然后启用备份我的数据和自动恢复。” 但我的设备(SE Xperia Mini)中不存在该选项。我只能猜测这个选项总是启用的,不能关闭。我在瑞典使用 Telia 作为我的接线员(如果重要的话)。
任何人都知道为什么从 Market 重新安装时备份不起作用,但在使用模拟器和通过 USB 在设备上时完全正常工作?
android - BackupAgent 什么都不做
显现:
代码:
myPrefsBackupAgent
不在顶层com.backme
但在的顶层有关系com.backme.utils
吗?仅供参考,我没有在日志中看到“备份”。