Android中resolveActivity与queryIntentActivities返回ResolveInfo差异原因
resolveActivity()与queryIntentActivities()返回结果差异原因
核心差异来自两个API的设计定位和入参过滤规则
resolveActivity()的设计目标是返回可直接启动的唯一最优匹配项
你调用时传入了PackageManager.MATCH_DEFAULT_ONLY标记,该标记要求仅返回声明了android.intent.category.DEFAULT分类的Activity。当系统识别到有多个符合条件的Activity、且用户未设置过该类Intent的默认打开方式时,会返回系统自带的应用选择器组件com.android.internal.app.ResolverActivity(对应包名为android,属于系统框架组件),也就是你日志输出的结果,用于引导用户手动选择打开应用。queryIntentActivities()的设计目标是返回所有匹配该Intent的Activity列表
你调用时传入的flag为0,没有额外过滤限制,所有声明了对应IntentFilter、可接收该deeplink的Activity都会被检索出来,因此会输出你自身业务的NewsActivity和Chrome的IntentDispatcher两个结果。
常见处理方案
如果需要获取业务预期的目标Activity,可以采用两种方式:
- 调整
resolveActivity()的入参flag为0,移除MATCH_DEFAULT_ONLY限制,此时会返回匹配列表中优先级最高的Activity - 优先调用
queryIntentActivities()获取全量匹配列表,自行筛选出目标Activity后,给Intent显式设置Component信息再跳转,避免弹出系统选择器
内容的提问来源于stack exchange,提问作者lannyf
相关产品推荐
相关产品推荐

