当我使用GET_INTENT_FILTERS和MATCH_DEFAULT_ONLY查询packageManager时,会得到不同的结果。我试图找到正确的过滤器,我需要设置。谁能解释一下区别吗?
final PackageManager mgr = mContext.getPackageManager();
List<ResolveInfo> list = mgr.queryIntentActivities(intent,
PackageManager.GET_INTENT_FILTERS);
发布于 2013-12-11 11:13:37
如果指定MATCH_DEFAULT_ONLY
,则调用将返回与提供的Intent
匹配的所有活动的ResolveInfo
对象。在执行匹配时,Android只会考虑清单中的CATEGORY=DEFAULT
定义中包含<intent-filter>
的活动。这与在startActivity()
上调用Intent
时使用的匹配行为相同。如果不指定此标志,则查询将返回所有匹配的活动,即使是那些在其<intent-filter>
中不包含CATEGORY=DEFAULT
的活动。当然,如果传递给queryIntentActivities()
的queryIntentActivities()
已经包含CATEGORY=DEFAULT
,则不需要标志。
如果指定GET_INTENT_FILTERS
,则生成的ResolveInfo
对象还将包含成功匹配的IntentFilter
。您可以通过ResolveInfo.filter
访问它。
这两个标志并不是相互排斥的。MATCH_DEFAULT_ONLY
控制如何执行匹配以确定要返回的ResolveInfo
对象。GET_INTENT_FILTERS
控制在ResolveInfo
对象本身中返回什么(附加)信息。如果需要,可以指定这两个标志,如下面的MATCH_DEFAULT_ONLY | GET_INTENT_FILTERS
https://stackoverflow.com/questions/20506406
复制相似问题