Android 确定是新安装还是更新

Android 确定是新安装还是更新,android,Android,这是一个棘手的问题: 假设某个应用程序中包含一个SDK。这个应用程序在市场上已经有相当一段时间了,但是SDK是从最新版本开始集成的。因此,客户可以通过两种方式访问包含SDK的应用程序: 此人之前没有该应用程序,下载了最新版本 此人已经在没有SDK的旧版本中安装了应用程序,并使用SDK更新到新版本 现在,当应用程序第一次打开时,SDK如何确定应用程序是否已安装或更新 我想到了一些事情,但没有成功: 你可以搜索一个在安装应用程序时创建的文件,并且从那时起从未更改过。只需查找上次修改的字段,您就知道

这是一个棘手的问题: 假设某个应用程序中包含一个SDK。这个应用程序在市场上已经有相当一段时间了,但是SDK是从最新版本开始集成的。因此,客户可以通过两种方式访问包含SDK的应用程序:

  • 此人之前没有该应用程序,下载了最新版本
  • 此人已经在没有SDK的旧版本中安装了应用程序,并使用SDK更新到新版本
  • 现在,当应用程序第一次打开时,SDK如何确定应用程序是否已安装或更新

    我想到了一些事情,但没有成功:

    • 你可以搜索一个在安装应用程序时创建的文件,并且从那时起从未更改过。只需查找上次修改的字段,您就知道应用程序是何时安装的。我在data/data/中找到了lib文件,但每次应用程序更新时它都会更新,因此没有任何用处。编辑:文件从未更改的原因是无法访问文件创建时间,因此我们必须确保last modified==创建时间

    • sdk应该与Android 1.6兼容,因此它
    • 我不认为我可以访问数据/应用程序来查看apk本身,但即使我可以,每次更新应用程序时,apk都会被替换,所以上次修改会给我上次更新的时间,而不是安装的时间


    谢谢你的帮助。

    我想到了几件事:

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

    如果SD卡不存在,请在SD卡上创建一个文件(最好是mnt/SDCard/Android/data/com.my.package.name/)。用版本代码或者别的什么来命名它。然后,您将创建版本代码和时间,以备需要。该文件夹的好处是,它在更新应用程序时会持续存在,但在卸载应用程序时会被删除(缺点:我认为该功能可从API级别8及更高版本获得,您必须检查)

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


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

    防止用户重新安装以前安装的应用程序。抱歉,我看不到与我的问题的联系。感谢您的建设性回答。但是,只有当SDK已经包含在以前版本的应用程序中时,它才起作用。示例:用户安装不带SDK的应用程序。应用程序使用SDK获取更新。用户更新他的应用程序。在共享prefs/sdcard/数据库中找不到以前的版本,因此它必须是新安装的。事实上,这是一个更新,所以我得到了一个错误的信息。