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中加入查询权限:
如果你只需要查询当前应用内的符合条件的Activity,可以不加这个权限,查询时额外指定包名过滤即可。<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" android:ignore="QueryAllPackagesPermission" />
内容的提问来源于stack exchange,提问作者Meripushko
相关产品推荐
相关产品推荐

