You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio/Kotlin:如何获取带MAIN和LAUNCHER属性的所有Activity名称

实现方案

你的猜测是对的,这个需求完全可以通过PackageManager实现,核心实现步骤如下:

  • 构造查询过滤用的Intent,指定要匹配ACTION_MAIN和CATEGORY_LAUNCHER两个属性
  • 调用PackageManager的queryIntentActivities()方法查询系统中所有匹配的Activity信息
  • 提取查询结果中的Activity显示名称,组装成列表供ListView渲染

核心Kotlin代码示例(在带ListView的Activity中编写)

// 1. 构造查询Intent
val queryIntent = Intent(Intent.ACTION_MAIN, null).apply {
    addCategory(Intent.CATEGORY_LAUNCHER)
}
// 2. 查询匹配的Activity列表,flags用MATCH_ALL即可覆盖所有符合条件的条目
val pkgManager = packageManager
val resolveInfoList = pkgManager.queryIntentActivities(queryIntent, PackageManager.MATCH_ALL)
// 3. 提取Activity显示名称(就是桌面图标下的名称)
val activityNameList = mutableListOf<String>()
resolveInfoList.forEach { resolveInfo ->
    val activityLabel = resolveInfo.loadLabel(pkgManager).toString()
    activityNameList.add(activityLabel)
}
// 4. 把activityNameList绑定到你的ListView适配器即可,如果你需要更多信息也可以从resolveInfo中提取:
// 包名:resolveInfo.activityInfo.packageName
// Activity全类名:resolveInfo.activityInfo.name

注意事项

  • Android 11(API 30)及以上版本如果需要查询其他应用的符合条件的Activity,需要在AndroidManifest.xml中加入查询权限:
    <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
        android:ignore="QueryAllPackagesPermission" />
    
    如果你只需要查询当前应用内的符合条件的Activity,可以不加这个权限,查询时额外指定包名过滤即可。

内容的提问来源于stack exchange,提问作者Meripushko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:54:03