How to get app install time from android

后端 未结 3 1574
暖寄归人
暖寄归人 2020-11-28 03:10

i try some method,but not success,help me.

3条回答
  •  悲&欢浪女
    2020-11-28 04:17

    In API level 9 (Gingerbread) and above, there's the PackageInfo.firstInstallTime field, holding milliseconds since the epoch:

    packageManager.getPackageInfo(packageName, 0).firstInstallTime;
    

    I have the following code to use it if available, and fall back to the apk modification time:

    // return install time from package manager, or apk file modification time,
    // or null if not found
    public Date getInstallTime(
        PackageManager packageManager, String packageName) {
      return firstNonNull(
        installTimeFromPackageManager(packageManager, packageName),
        apkUpdateTime(packageManager, packageName));
    }
    
    private Date apkUpdateTime(
        PackageManager packageManager, String packageName) {
      try {
        ApplicationInfo info = packageManager.getApplicationInfo(packageName, 0);
        File apkFile = new File(info.sourceDir);
        return apkFile.exists() ? new Date(apkFile.lastModified()) : null;
      } catch (NameNotFoundException e) {
        return null; // package not found
      }
    }
    
    private Date installTimeFromPackageManager(
        PackageManager packageManager, String packageName) {
      // API level 9 and above have the "firstInstallTime" field.
      // Check for it with reflection and return if present. 
      try {
        PackageInfo info = packageManager.getPackageInfo(packageName, 0);
        Field field = PackageInfo.class.getField("firstInstallTime");
        long timestamp = field.getLong(info);
        return new Date(timestamp);
      } catch (NameNotFoundException e) {        
        return null; // package not found
      } catch (IllegalAccessException e) {
      } catch (NoSuchFieldException e) {
      } catch (IllegalArgumentException e) {
      } catch (SecurityException e) {
      }
      // field wasn't found
      return null;
    }
    
    private Date firstNonNull(Date... dates) {
      for (Date date : dates)
        if (date != null)
          return date;
      return null;
    }
    

提交回复
热议问题