2012-07-23 80 views
0

这是一个艰难的问题: 假设有一个SDK在某个时间点包含在应用程序中。这款应用程序在市场上已经有相当长的一段时间了,但是自从最新的版本以后,SDK就已经集成了。因此,有获得与SDK应用两种方式的客户包括:确定是否新安装或更新

  1. 此人以前是没有的应用程序,并下载最新版本
  2. 的人已经有安装了旧版本的应用程序没有SDK和SDK更新到新版本

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

有些事情,我认为,没有成功:

  • 一个可以搜索安装应用程序时创建,从来没有从该点改变的文件。只需查看最后修改的字段,即可知道应用何时安装。我在data/data /中找到了lib文件,但每次应用程序更新时它都会更新,因此没有用处。编辑:为什么它的导入文件从未改变的原因是没有办法来访问文件创建时间,所以我们必须确保最后修改==创建时间

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

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

感谢您的帮助。

+0

阻止用户重新安装以前安装的应用程序http://stackoverflow.com/q/8426963/1012284 – 2012-07-23 14:10:23

+0

对不起,但我没有看到与我的问题的连接。 – Kuno 2012-07-23 14:51:34

回答

0

想到几件事:

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

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

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

使用数据库帮助程序来存储里面的版本代码和时间戳。 DB帮助程序可以跟踪数据库的版本。

+0

谢谢你的建设性答案。但是,只有当SDK已经包含在应用程序的先前版本中时才有效。示例:用户安装不带SDK的应用程序。应用程序通过SDK获取更新。用户更新他的应用。共享prefs/sdcard /数据库中没有以前的版本可以找到,所以它必须是一个新的安装。实际上它是一个更新,所以我得到一个错误的信息。 – Kuno 2012-07-23 14:48:38