android - 查询 packageManager 以处理 Intent 时 GET_INTENT_FILTERS 和 MATCH_DEFAULT_ONLY 之间的区别

标签 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);

最佳答案

如果指定 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/

相关文章:

android - 如何通过 USB 电缆从 Android 应用程序访问 tomcat 服务器?

java - 在 BroadcastReceiver 类中打开 hibernate 的 Android 设备

javascript - WebView 返回错误的 window.innerHeight

java - 使用外部 Java 插件在 PhoneGap/Cordova 中捕获音频/视频

android - 如何启动第三方应用程序的 Intent ?

java - 记住使用搜索过滤器选中了哪个复选框

android - 如何在 Android RecyclerView 适配器中过滤后获取原始项目位置?

android - 如何在 Android Studio 1.0 中查找过滤器 Logcat 配置?

android - 当水平模式(RTL)下数据太大时,FlatList 会自动滚动到第一个

java - 使用 Intents 传递铃声数据