Как получить время установки приложения из Android

Я пробую какой-то метод, но не успеваю, помогите мне.

PackageManager pm = context.getPackageManager(); ApplicationInfo appInfo = pm.getApplicationInfo("app.package.name", 0); String appFile = appInfo.sourceDir; long installed = new File(appFile).lastModified(); //Epoch Time 

В уровне API 9 (Gingerbread) и выше есть поле PackageInfo.firstInstallTime , удерживающее миллисекунды с эпохи:

 packageManager.getPackageInfo(packageName, 0).firstInstallTime; 

У меня есть следующий код, чтобы использовать его, если он доступен, и возвращайтесь к времени модификации apk:

 // 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; } 

PackageInfo.firstInstallTime дает вам время установки в «Unix time» (время в миллисекундах с «эпохи» , то есть 1 января 1970 года 00:00:00 по UTC ). Вы можете использовать java.util.Date или java.text.DateFormat , чтобы отформатировать это время.

 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(); } 

Вы также можете изменить формат даты с помощью 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);