通过 Google Play 更新应用程序时如何下载内容?

5
这是我第一次更新我的应用程序,我不知道通过谷歌商店更新应用程序实际发生了什么。
以下是我无法得到答案的一些问题:
- 更新了什么,更新过程中使用的方法或回调是什么? - 共享首选项文件会发生什么变化,名称值对会更改/重置吗?
假设我想从服务器下载一些文件,并在后台执行一些数据库操作。当应用程序通过谷歌商店更新时,我应该如何正确处理?
--编辑--
为了更清楚地表达,我希望在用户更新应用程序时自动进行一些处理,而他不必打开应用程序。为此,我正在寻找由谷歌商店提供给我的应用程序的任何意图触发器(隐式或显式)。
5个回答

6
您需要实现一个广播接收器,当应用程序包正在被替换时会收到通知:
在您的清单文件中包含以下内容:
<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,也不会影响应用程序数据文件夹中的文件。


如果您现在将其包含在您的应用程序中,广播将已经为此更新调用。因此,如果您到目前为止还没有更新您的应用程序,您仍然可以跟踪您的第一个更新。 - Thommy
我尝试过,但只有当条目已经存在于清单中时,它才会进入“OnReceive”回调函数。否则不会进入该回调函数。 - Prateek
在我的测试中,当我第一次使用新的清单安装/更新应用程序后,它直接被调用。 - Thommy

1

检查新版本是否已安装的一种方法是使用共享首选项。当应用程序打开时,可以检查该版本是否存在条目。如果没有,则安装了新版本。处理完成后,可以将当前版本号保存在共享首选项中。

至于您的第二个问题,共享偏好设置不会因更新过程而丢失或重置。它们保持原样。


感谢您的时间!但我正在寻找一种自动化的方法,我不希望用户打开应用程序来启动此过程,如果他在星期天从Google Play更新应用程序并于周二打开它,我希望可以在Google Play更新完成时触发某个操作。 - Prateek

0

你可能会很难实现这个功能,因为已经安装的应用程序没有干净的方法来做到这一点。如果你有应用内购买(这只是猜测),并且谷歌的应用内购买系统有一个动态仪表板或API来注册用户,那么你可以设置一个新的唯一密钥,并通过这个应用内购买系统跟踪它。不过这可能是不可能的。

第二件事是在服务器数据库中查找用户并为所有用户创建所提到的文件,并将它们保存在服务器缓存中(以便快速访问)。然后,在你的应用程序中,当这个新版本首次启动时,你可以快速将这个文件发送给用户。这似乎是一个好的安全解决方案。

祝你好运,这是一个有趣的问题,我期待着听到你如何解决它。

刚想起来,你也可以研究推送通知并将这些数据推送给用户。但是,这需要你的应用程序具备这个功能。


感谢您的时间。我尝试使用Thommy的答案,广播正在工作,所以也许将来我会采用它。 - Prateek

0

@prateek 用户需要手动启动应用程序才能从Android 3.1开始应用广播接收器解决方案。我认为你没有任何选择...抱歉伙计...一个小建议是,当你真正想要做一些与用户交互的事情时,尝试放置一个推送通知处理程序或广播接收器来触发频繁操作而不需要用户交互...干杯!


感谢您的时间。我尝试使用Thommy的答案,广播正在工作,所以也许未来我会采用它。 - Prateek

0

您可以采用以下方式:

在用户首次安装并启动应用程序时,应将当前版本存储为共享首选项中的last_vertion_of_app。然后使用Alarm Manager + Broadcast Receiver + Service来检查清单应用程序版本与共享首选项存储的版本是否不同(不相等),这意味着发生了一些更新。然后,即使未启动应用程序,您也可以在保存服务中执行所需的操作,如果updated=true。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接