【问题标题】:Difference between GET_INTENT_FILTERS and MATCH_DEFAULT_ONLY when querying the packageManager to handle an intent查询 packageManager 以处理意图时 GET_INTENT_FILTERS 和 MATCH_DEFAULT_ONLY 之间的区别
【发布时间】:2013-12-28 16:11:18
【问题描述】:

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

final PackageManager mgr = mContext.getPackageManager();
List<ResolveInfo> list = mgr.queryIntentActivities(intent,
                PackageManager.GET_INTENT_FILTERS);

【问题讨论】:

    标签: android android-intent android-filter


    【解决方案1】:

    如果您指定MATCH_DEFAULT_ONLY,则调用将为与提供的Intent 匹配的所有活动返回一个ResolveInfo 对象。执行匹配时,Android 将仅考虑清单中 &lt;intent-filter&gt; 定义中包含 CATEGORY=DEFAULT 的活动。这与在Intent 上调用startActivity() 时使用的匹配行为相同。如果您不指定此标志,则查询将返回所有匹配的活动,即使是在其&lt;intent-filter&gt; 中不包含CATEGORY=DEFAULT 的活动。当然,如果您传递给queryIntentActivities()Intent 已经包含CATEGORY=DEFAULT,则不需要该标志。

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

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

    【讨论】:

    • ummmm... 你怎么甚至以这种方式使用 GET_INTENT_FILTERS?使用上面的代码,IDE 说“Must be one of ....”,其中没有一个是 this。
    • 同意..GET_INTENT_FILTERS 标记为“必须是...之一”,但我可以成功编译项目。我认为IDE无法理解它,但编译器是。
    • @androiddeveloper IDE 坏了。
    • @DevendraVaja IDE 坏了
    • @DevendraVaja GET_INTENT_FILTERS 不受PackageManager#queryIntentActivities 支持,请改用GET_RESOLVED_FILTER
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 1970-01-01
    • 2020-08-20
    • 2012-08-11
    • 2018-10-17
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多