确定是否新安装或更新

时间:2012-07-23 14:03:18

标签: android

这是一个艰难的一个: 可以说,某个应用程序中包含了一个SDK。这个应用程序现在已经上市很长一段时间了,但SDK自最新版本开始集成。因此,客户可以通过两种方式访问​​包含SDK的应用程序:

  1. 该人之前没有该应用程序并下载最新版本
  2. 此人已安装旧版本的应用程序而没有SDK,并使用SDK
  3. 更新到新版本

    现在,当应用程序首次打开时,SDK如何确定应用程序是否已安装或更新?

    我想到的一些事情没有成功:

    • 可以搜索在安装应用程序时创建的文件,并且永远不会从该点进行更改。只需查看最后修改的字段,您就知道应用程序的安装时间。我在data / data /中找到了lib文件,但每次应用程序更新时它都会更新,所以没有用。编辑:导致该文件从未被更改的原因是无法访问文件创建时间,因此我们必须确保最后修改==创建时间

    • sdk应该与Android 1.6兼容,所以它是< API 9和我无法访问PackageInfo.firstInstallTime字段。

    • 我不认为我有权访问数据/ app以查看apk iteself,但即使我可以,每当我更新应用程序时,apk都会被替换,所以最后修改会给我上次更新的时间,而不是安装。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

有几件事情浮现在脑海中:

在共享首选项中存储版本号。首先调用它,如果没有设置值,则设置当前版本号(这只在第一次安装时发生,可能在Application类中)。稍后您可以检查首选项并将其与当前版本进行比较。更新时,您仍然会有第一个版本代码,并将其与当前版本代码进行比较,因为您需要在发布应用更新时增加版本代码。

如果SDCard不存在,请在SDCard上创建一个文件(最好是在mnt / sdcard / Android / data / com.my.package.name /中)。用版本代码或其他名称命名。然后,您将获得版本代码和时间,以备不时之需。关于该文件夹的好处是它在更新你的应用程序时仍然存在但在卸载时会被删除(con:我认为该功能可从API Level 8及更高版本获得,你必须检查)

与文件相同,但在手机内存上的data / data / com.package.name文件夹中(数据库也保存在那里,你的应用程序是唯一可以访问它的应用程序 - 除非有根),这肯定会卸载时删除并在更新时保留。

使用数据库帮助程序在其中存储版本代码和时间戳。 DB帮助程序有一种跟踪数据库版本的方法。