乐者为王

Do one thing, and do it well.

如何获得已安装应用的安装时间和占用空间

可以通过ApplicationInfo类中sourceDir取得应用的文件路径,再使用File类读取文件的相关属性实现。不过这可能导致:

  1. 无法获取原始的创建时间,可能很早就被创建了,之后被替换了;
  2. 如果这个应用在一个私有的位置,比如app-private目录(使用Market付费购买的应用在这个位置),没有ROOT权限的手机会导致读取失败。
1
2
3
4
5
6
7
8
List<PackageInfo> pkgs = getPackageManager().getInstalledPackages(0);
for (int i = 0; i < pkgs.size(); i++) {
    PackageInfo pkg = pkgs.get(i);

    File file = new File(pkg.applicationInfo.sourceDir);
    System.out.println("file size: " + file.length());
    System.out.println("file last modified: " + file.lastModified());
}

不过File类中文件大小和文件最后修改时间的值是long型,不是用户友好的,在显示前需要格式化一下:

1
2
3
4
5
6
7
String size = Formatter.formatFileSize(context, file.length())

Date date = new Date(file.lastModified())
String lastModified = new SimpleDateFormat("yyyy-MM-dd").format(date)

System.out.println("file size: " + size);
System.out.println("file last modified: " + lastModified);

从Android 2.3 API Level为9开始,ApplicationInfo类新增了firstInstallTime和lastUpdateTime两个字段,可以直接获取应用的创建和最后修改时间,即使是付费软件也能正常获取。

Comments