How to get app install time from android

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

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

相关标签:
3条回答
  • 2020-11-28 03:55

    PackageInfo.firstInstallTime gives you the install time in "Unix time" (the time in milliseconds since "the epoch", i.e. January 1, 1970 00:00:00 UTC). You may use java.util.Date or java.text.DateFormat in order to format this time.

    private static final String TAG = "MyActivity";
    
    ...
    packageName = ...
    ...
    
    try {
        PackageInfo packageInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
    
        Date installTime = new Date( packageInfo.firstInstallTime );
        Log.d(TAG, "Installed: " + installTime.toString());
    
        Date updateTime = new Date( packageInfo.lastUpdateTime );
        Log.d(TAG, "Updated: " + updateTime.toString());
    }
    catch ( PackageManager.NameNotFoundException e ) {
        e.printStackTrace();
    }
    

    You can also change the date format with java.text.SimpleDateFormat.

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    
    String installTime = dateFormat.format( new Date( packageInfo.firstInstallTime ) );
    Log.d(TAG, "Installed: " + installTime);
    
    String updateTime = dateFormat.format( new Date( packageInfo.lastUpdateTime ) );
    Log.d(TAG, "Updated: " + updateTime);
    
    0 讨论(0)
  • 2020-11-28 03:58
    PackageManager pm = context.getPackageManager();
    ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0);
    String appFile = appInfo.sourceDir;
    long installed = new File(appFile).lastModified(); //Epoch Time
    
    0 讨论(0)
  • 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;
    }
    
    0 讨论(0)
提交回复
热议问题