以下是我无法得到答案的一些问题:
- 更新了什么,更新过程中使用的方法或回调是什么? - 共享首选项文件会发生什么变化,名称值对会更改/重置吗?
假设我想从服务器下载一些文件,并在后台执行一些数据库操作。当应用程序通过谷歌商店更新时,我应该如何正确处理?
--编辑--
为了更清楚地表达,我希望在用户更新应用程序时自动进行一些处理,而他不必打开应用程序。为此,我正在寻找由谷歌商店提供给我的应用程序的任何意图触发器(隐式或显式)。
<receiver android:name="my.package.MyReceiver">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_REPLACED"/>
<data android:scheme="package" />
</intent-filter>
</receiver>
要实现接收广播功能,需要让MyReceiver
类继承android.content.BroadcastReceiver
类。
回答你的第二个问题:在Google Play上更新应用程序不会影响SharedPreferences,也不会影响应用程序数据文件夹中的文件。
检查新版本是否已安装的一种方法是使用共享首选项。当应用程序打开时,可以检查该版本是否存在条目。如果没有,则安装了新版本。处理完成后,可以将当前版本号保存在共享首选项中。
至于您的第二个问题,共享偏好设置不会因更新过程而丢失或重置。它们保持原样。
你可能会很难实现这个功能,因为已经安装的应用程序没有干净的方法来做到这一点。如果你有应用内购买(这只是猜测),并且谷歌的应用内购买系统有一个动态仪表板或API来注册用户,那么你可以设置一个新的唯一密钥,并通过这个应用内购买系统跟踪它。不过这可能是不可能的。
第二件事是在服务器数据库中查找用户并为所有用户创建所提到的文件,并将它们保存在服务器缓存中(以便快速访问)。然后,在你的应用程序中,当这个新版本首次启动时,你可以快速将这个文件发送给用户。这似乎是一个好的安全解决方案。
祝你好运,这是一个有趣的问题,我期待着听到你如何解决它。
刚想起来,你也可以研究推送通知并将这些数据推送给用户。但是,这需要你的应用程序具备这个功能。
@prateek 用户需要手动启动应用程序才能从Android 3.1开始应用广播接收器解决方案。我认为你没有任何选择...抱歉伙计...一个小建议是,当你真正想要做一些与用户交互的事情时,尝试放置一个推送通知处理程序或广播接收器来触发频繁操作而不需要用户交互...干杯!
您可以采用以下方式:
在用户首次安装并启动应用程序时,应将当前版本存储为共享首选项中的last_vertion_of_app。然后使用Alarm Manager + Broadcast Receiver + Service来检查清单应用程序版本与共享首选项存储的版本是否不同(不相等),这意味着发生了一些更新。然后,即使未启动应用程序,您也可以在保存服务中执行所需的操作,如果updated=true。