Skip to content

Latest commit

 

History

History
37 lines (32 loc) · 1.52 KB

获取系统内安装应用信息的方法.md

File metadata and controls

37 lines (32 loc) · 1.52 KB

获取系统内安装应用信息的方法

获取系统内所有的应用方法还是比较简单的,但是因为系统版本差异,有几个地方要注意的。

获取安装的应用列表

按照Android SDK的文档来说,获取应用列表非常简单,PackageManager类直接有getInstalledPackages方法可以用,但是在低版本上使用该API,当安装应用很多的时候,返回的列表会溢出,ISSUE,所以自己想出了个兼容性方案:

fun PackageManager.getInstalledPackagesAppCompat(flags: Int): List<PackageInfo> {
    val list = ArrayList<PackageInfo>()
    var bufferedReader: BufferedReader? = null
    try {
        val process = Runtime.getRuntime().exec("pm list packages")
        bufferedReader = BufferedReader(InputStreamReader(process.inputStream))
        var str: String?
        do {
            str = bufferedReader.readLine()
            if (str == null) break
            val packageName = str.substring(str.indexOf(':') + 1);
            val packageInfo = this.getPackageInfo(packageName, flags)
            list.add(packageInfo)
        } while (str != null)
        process.waitFor();
    } catch(ex: IOException) {
        /* Do nothing */
    } finally {
        try {
            bufferedReader?.close()
        } catch(ex: IOException) {
            /* Do nothing */
        }
    }

    return list
}