当我查询packageManager时,我使用GET_INTENT_FILTERS和MATCH_DEFAULT_ONLY得到不同的结果.我试图找到我需要设置的正确过滤器.有人可以解释一下这个区别吗?
final PackageManager mgr = mContext.getPackageManager(); Listlist = mgr.queryIntentActivities(intent, PackageManager.GET_INTENT_FILTERS);
David Wasser.. 7
如果指定MATCH_DEFAULT_ONLY
调用,则将返回ResolveInfo
与提供的所有活动匹配的对象Intent
.当进行匹配,Android将只考虑有活动,CATEGORY=DEFAULT
他们
在清单的定义.这是相同的匹配行为打电话时使用startActivity()
的Intent
.如果未指定此标志,则查询将返回所有匹配的活动,即使是那些不包含CATEGORY=DEFAULT
在其中的活动
.当然,如果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