如何记录应用最近一次更新时间?(不通过应用市场) 如何过滤系统应用?

如何记录应用最近一次更新时间?(不通过应用市场) 如何过滤系统应用?

通过三元素原理,记录用户自装应用最近一次更新时间点

f ((mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) {
if ((mAppInfo.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
mAppButtonState = AppButtonStates.FACTORY_RESET;
mAppButtonText = getText(R.string.app_factory_reset);
} else {
if ((mAppInfo.flags & ApplicationInfo.FLAG_ALLOW_CLEAR_USER_DATA) == 0) {
// Hide button if diableClearUserData is set
mAppButtonState = AppButtonStates.NONE;
visible = false;
} else {
mAppButtonState = AppButtonStates.CLEAR_DATA;
mAppButtonText = getText(R.string.clear_user_data_text);
}
}
} else {
mAppButtonState = AppButtonStates.UNINSTALL;
mAppButtonText = getText(R.string.uninstall_text);
}

上面标红的一句,if ((mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0)就是用来判断应用程序是不是系统自带的。这样就可以通过这句来过滤掉系统自带的应用程序,例子如下

List packs = context.getPackageManager().getInstalledPackages(0);
int count = packs.size() - 1;
for (int i = 0; i <= count; i++) {
PackageInfo p = packs.get(i);

        if (p.versionName == null) { 
            continue; 
        } 
        ApplicationInfo itemInfo = p.applicationInfo; 
        if  ((itemInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) 
            continue; 
      
     ............... 

    }

1、记录当前应用versionCode,缓存起来;
2、每次启动统计应用,重新获取versionCode,如versionCode有变化,最近一次记录时间,即是应用最近一次更新时间