gaoshijie365.tech

实战:获取已安装应用的信息

2020-04-03  本文已影响0人  小狮子365

背景信息

当我们看到别人手机里有一个酷炫的软件的时候,也想安装研究研究的时候,会怎么办呢?

我和你一样,想当然的会问一下这个应用叫什么名字,然后从应用商店里面去搜索,如果幸运的话,就会从应用商店里面给搜索出来。但是也有不幸的情况是吧?我们知道应用商店有小米、安智、360、应用宝等等非常的多,并不是每个 APP 都会上传到所有的应用商店,所以我们从自己应用商店里搜索对应的 APP 失败的可能性还是有的,尤其是小众一点的 APP。那这时候我们会怎么办呢?

既然从应用商店搜不到,那就直接网页搜索吧,从官网或者是其他网站搜索到后下载,然后传到手机上进行安装。但是这个流程好麻烦啊,还得搜索,从搜索结果中筛选出那个靠谱的下载地址,下载,传到手机安装。

通过这两个方法我们总能下载安装这个酷炫的 APP。但是针对应用商店找不到,又不得不去网页搜索的情况有没有更便捷的方法呢?比如让别人直接把安装包发给自己,省下检索的时间多好啊。别说,还真有办法,且听我细细道来哈。

效果图-展示获取到的信息

问题分析

问题的关键在于获取到已安装应用的信息,然后从这些信息中找到对应的安装包文件,找到文件后怎么发送就看大家的喜好了~

获取已安装应用的信息,关键在于两个类:

接下来就来看看如何实现吧。

代码实现

首先我们来定义一个类来包装我们想要获取的信息。

data class InstalledAppInfo(
    val packageName: String, // 包名
    val versionCode: Int, // 版本号
    val versionName: String, // 版本名
    val firstInstallTime: Long, // 首次安装时间
    val lastUpdateTime: Long, // 最近一次更新时间
    val sourceDir: String, // APK 文件位置
    val label: String, // 应用名
    val icon: Drawable, // 应用图标
    val systemApp: Boolean // 系统 APP
)

核心代码很少,就一个方法而已。

fun Context.installedAppInfoList(): List<InstalledAppInfo> {
    val installedAppInfoList = mutableListOf<InstalledAppInfo>()

    val packageInfoList = packageManager.getInstalledPackages(0)
    packageInfoList.forEach {
        it.apply {
            val installedAppInfo = InstalledAppInfo(
                    packageName = packageName,
                    versionCode = versionCode,
                    versionName = versionName,
                    firstInstallTime = firstInstallTime,
                    lastUpdateTime = lastUpdateTime,
                    sourceDir = applicationInfo.sourceDir,
                    label = packageManager.getApplicationLabel(it.applicationInfo).toString(),
                    icon = packageManager.getApplicationIcon(it.applicationInfo),
                    systemApp = !applicationInfo.sourceDir.contains("/data/app/"))
            installedAppInfoList.add(installedAppInfo)
        }
    }
    return installedAppInfoList
}

这里有几点需要注意:

至此,我们的核心工作已经完成了,至于获取到这些信息之后怎么去用那就发挥各自的创造性吧。啊哈哈哈哈~

总结

整体来说这个案例不难,但是的确实用啊。这里我给定义成了 Context 的扩展方法,可以放在自己的工具库中,这样就可以避免写重复的代码了。

最后提一句,这个案例源码地址:https://github.com/gaoshijie365/Case-InstalledAppInfo

上一篇下一篇

猜你喜欢

热点阅读