5

所以这是我第一次为我的应用程序发送更新,我不知道当应用程序通过 google-play 更新时会发生什么,

以下是一些我无法回答的问题:

  • 实际更新了什么以及这个过程是如何工作的,即更新完成时的方法或回调?

  • 共享首选项文件会发生什么,名称值对更改/重置

假设我想从服务器下载一些文件,当应用程序通过谷歌播放更新并在后台对该文件进行一些数据库操作时。我怎样才能以正确的方式解决这个问题。

- 编辑 -

为了更清楚,我想在用户更新应用程序时自动进行一些处理并且他不费心打开应用程序并实现这一点我正在寻找一个由谷歌播放提供给我的应用程序的触发器意图[隐式或显式]。

4

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

以回答您的第二个问题:SharedPreferences 不受通过 Google Play 更新的影响,您的应用程序数据文件夹中的文件也不受此影响。

于 2013-11-18T07:50:10.107 回答
1

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

至于您的第二个问题,更新过程不会丢失或重置共享首选项。他们保持原样。

于 2013-11-15T11:59:14.147 回答
0

您可能在这里不走运,因为没有干净的方法可以使用已安装的应用程序执行此操作。如果你有应用内计费(这是推测)并且谷歌的应用内计费系统有一个动态仪表板或 API 来注册用户,那么你可以说设置一个新的某种唯一密钥并通过这个 in-应用计费系统。但这可能是不可能的。

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

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

请记住,您还可以查看推送通知并将此数据推送给用户。但是,这假设您的应用程序具有此功能。

于 2013-11-20T18:10:30.903 回答
0

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

于 2013-11-21T12:12:41.220 回答
0

你可以这样接近

在用户第一次安装和启动应用程序时,您应该将当前版本存储为 last_version_of_app 在共享首选项中。然后使用警报管理器+广播接收器+服务来检查清单应用程序版本和共享首选项存储版本,如果两者不同(不相等),这意味着发生了一些更新。那么即使没有应用程序启动,如果在保存服务中更新 = true,您也可以执行您想要发生的事情。

于 2013-11-22T03:10:06.363 回答