Intento algún método, pero no tengo éxito, ayúdame.
Solución del problema
En el nivel de API 9 (Gingerbread) y superior, está el campo PackageInfo.firstInstallTime, que contiene milisegundos desde la época:
packageManager.getPackageInfo(packageName, 0).firstInstallTime;
Tengo el siguiente código para usarlo si está disponible, y recurro al tiempo de modificación del 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;
}
No hay comentarios:
Publicar un comentario