如何获取Android应用的全部Intent?现有代码仅输出主Intent
获取Android应用的全部Intent
原代码仅能提取主Intent(android.intent.action.MAIN),要获取目标应用的所有注册Intent,需要遍历应用内所有Activity的Intent Filter配置——因为每个Activity可能注册了多个不同的Intent规则。
原代码(仅获取主Intent)
以下代码仅将主意图(android.intent.action.MAIN)写入JSON
Intent intent = new Intent(Intent.ACTION_MAIN, null); intent.addCategory(Intent.CATEGORY_LAUNCHER); intent.setPackage(applicationInfo.packageName); List<ResolveInfo> intentList = packageManager.queryIntentActivities(intent, 0); JSONArray intentsArray = new JSONArray(); for (ResolveInfo resolveInfo : intentList) { intent = new Intent(Intent.ACTION_MAIN); intent.setComponent(new ComponentName(resolveInfo.activityInfo.packageName,resolveInfo.activityInfo.name)); String action = intent.getAction(); intentsArray.put(action); }
修改后的代码(获取全部Intent)
try { // 获取应用的PackageInfo,包含所有Activity及Intent Filter信息 PackageInfo packageInfo = packageManager.getPackageInfo( applicationInfo.packageName, PackageManager.GET_ACTIVITIES | PackageManager.GET_INTENT_FILTERS ); JSONArray allIntentsArray = new JSONArray(); // 遍历应用内所有Activity for (ActivityInfo activityInfo : packageInfo.activities) { // 遍历当前Activity的所有Intent Filter if (activityInfo.intentFilters != null) { for (IntentFilter filter : activityInfo.intentFilters) { JSONObject intentObj = new JSONObject(); // 提取所有Intent Action JSONArray actionsArray = new JSONArray(); for (int i = 0; i < filter.countActions(); i++) { actionsArray.put(filter.getAction(i)); } intentObj.put("actions", actionsArray); // 提取所有Intent Category JSONArray categoriesArray = new JSONArray(); for (int i = 0; i < filter.countCategories(); i++) { categoriesArray.put(filter.getCategory(i)); } intentObj.put("categories", categoriesArray); // 提取Intent Data Scheme(可选,按需添加) if (filter.getScheme(0) != null) { intentObj.put("scheme", filter.getScheme(0)); } // 添加关联的Activity组件信息 intentObj.put("activity_name", activityInfo.name); intentObj.put("package_name", activityInfo.packageName); allIntentsArray.put(intentObj); } } } // allIntentsArray 即为包含应用全部Intent信息的JSON数组 } catch (PackageManager.NameNotFoundException e) { e.printStackTrace(); }
关键说明
- 使用
PackageManager.GET_ACTIVITIES | PackageManager.GET_INTENT_FILTERS标记,确保获取完整的Activity和Intent Filter配置 - 每个Intent Filter可能包含多个Action、Category,需逐个提取
- 可根据需求扩展提取Data类型、MIME类型等其他Intent属性
内容的提问来源于stack exchange,提问作者SVOSilas
相关产品推荐
相关产品推荐

