当我在查询 packageManager 时使用 GET_INTENT_FILTERS 和 MATCH_DEFAULT_ONLY 时,我得到了不同的结果。 我试图找到我需要设置的正确过滤器。有人可以解释其中的区别吗?
final PackageManager mgr = mContext.getPackageManager();
List<ResolveInfo> list = mgr.queryIntentActivities(intent,
PackageManager.GET_INTENT_FILTERS);
最佳答案
如果指定 MATCH_DEFAULT_ONLY
该调用将返回 ResolveInfo
匹配提供的所有 Activity 的对象 Intent
.执行匹配时,Android 只会考虑具有 CATEGORY=DEFAULT
的 Activity 。在他们的 <intent-filter>
list 中的定义。这与调用 startActivity()
时使用的匹配行为相同在 Intent
上.如果不指定此标志,查询将返回所有匹配的 Activity ,即使是不包含 CATEGORY=DEFAULT
的 Activity 。在他们的 <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
关于android - 查询 packageManager 以处理 Intent 时 GET_INTENT_FILTERS 和 MATCH_DEFAULT_ONLY 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20506406/