借助PackageInfo
转自:
由于上面两种自定义的逻辑都不能很好的满足我的需求,所以我将希望寄托于系统,于是翻看了PackageManager相关的代码,果然在PackageInfo中找到了两个有用的值:firstInstallTime
,lastUpdateTime
,根据注释的描述,firstInstallTime表示应用第一次安装的时间,lastUpdateTime表示应用最后一次更新的时间,并且这两个值由系统维护,清除数据也不会影响结果,所以当firstInstallTime != lastUpdateTime时表示当前为升级用户。核心代码如下:
1 PackageManager pm = context.getPackageManager(); 2 PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0); 3 return pi.firstInstallTime == pi.lastUpdateTime;
这种方法的确很不错,但如果需求严苛的话,还是会有一些问题,
-
平级、降级安装也会更改lastUpdateTime的值,同样可能造成结果不准确。
-
支持的最小版本是9,虽然目前9以下的版本已经很少了