1.创建加载应用程序信息的意图(Intent) :
val intent = Intent(Intent.ACTION_MAIN, null)
intent.addCategory(Intent.CATEGORY_LAUNCHER)
这个意图的目的是获取所有启动器(Launcher)应用的信息。ACTION_MAIN 表示主操作,CATEGORY_LAUNCHER 表示该应用是一个启动器应用。
2.查询应用信息:
private lateinit var pm: PackageManager //包管理器
pm = mContext.packageManager
val appInfo = pm.queryIntentActivities(intent, 0)
使用 pm.queryIntentActivities 方法查询符合给定意图的所有活动(activities)信息。这里的 pm 是一个 PackageManager 对象,用于获取包管理相关信息。
3.遍历应用信息列表:
appInfo.forEachIndexed { _, resolveInfo ->
// 处理每个应用程序的信息
}
4.构建应用程序数据对象:
data class AppData(
val packName: String,
val appName: String,
val appIcon: Drawable,
val firstRunName: String,
val isSystemApp: Boolean
)
val appData = AppData(
resolveInfo.activityInfo.packageName,
resolveInfo.loadLabel(pm) as String,
resolveInfo.loadIcon(pm),
resolveInfo.activityInfo.name,
(resolveInfo.activityInfo.flags and ApplicationInfo.FLAG_SYSTEM) > 0
)
对每个应用程序,创建一个 AppData 对象,并将其添加到 mAllAppList 列表中。AppData 对象包含了应用的包名、标签(应用名称)、图标、活动名称和一个标志,该标志表示应用是否为系统应用。