查询packageManager处理意图时GET_INTENT_FILTERS和MATCH_DEFAULT_ONLY之间的区别

mr.*_*low 2 android android-intent android-filter

当我查询packageManager时,我使用GET_INTENT_FILTERS和MATCH_DEFAULT_ONLY得到不同的结果.我试图找到我需要设置的正确过滤器.有人可以解释一下这个区别吗?

final PackageManager mgr = mContext.getPackageManager();
List<ResolveInfo> list = mgr.queryIntentActivities(intent,
                PackageManager.GET_INTENT_FILTERS);
Run Code Online (Sandbox Code Playgroud)

Dav*_*ser 7

如果指定MATCH_DEFAULT_ONLY调用,则将返回ResolveInfo与提供的所有活动匹配的对象Intent.当进行匹配,Android将只考虑有活动,CATEGORY=DEFAULT他们<intent-filter>在清单的定义.这是相同的匹配行为打电话时使用startActivity()Intent.如果未指定此标志,则查询将返回所有匹配的活动,即使是那些不包含CATEGORY=DEFAULT在其中的活动<intent-filter>.当然,如果Intent您传递的内容queryIntentActivities()已经包含CATEGORY=DEFAULT,则不需要该标志.

如果指定GET_INTENT_FILTERS,结果ResolveInfo对象也将包含IntentFilter已成功匹配的对象.您可以通过此访问ResolveInfo.filter.

这两个标志并不相互排斥.MATCH_DEFAULT_ONLY控制如何执行匹配以确定ResolveInfo要返回的对象.GET_INTENT_FILTERS控制在ResolveInfo对象本身中返回的(附加)信息.如果你愿意,你可以像这样指定两个标志MATCH_DEFAULT_ONLY | GET_INTENT_FILTERS