如何排除Android意向过滤器的故障



如这里的许多问题所示,有时很难正确配置意向过滤器。如果一个过滤器没有像预期的那样工作(例如,应用程序显示"权限被拒绝"),有什么技巧可以找出原因?

更新:为了澄清,我不仅仅是在谈论内置意图。获得一个自定义OAuth回调URL来解决正确的活动一直很困难,但我不知道这个问题是由我的意图过滤器还是其他原因造成的。

选项1:捕获所有IntentFilter,然后调试IntentFilter.match()

我想问完全相同的问题。我知道没有现成的工具来调试失败的意图过滤器,但这是我正在考虑的方法:

  1. 使意向过滤器尽可能宽松(即在任何地方都放通配符),以便您可以从应用程序中获取和检查意向

  2. 将由此获得的Intent对象提交给真实意图过滤器的match方法。您应该能够通过查看返回的NO_MATCH_*常量来判断匹配在哪个阶段失败。

一旦您捕获了Intent,您还可以在调试器中运行匹配,以便更好地了解问题所在。

选项2:使用应用程序链接助手

(此选项仅在您想调试http/https链接时有效)

  1. 确保应用程序链接助手插件已启用(文件>设置>插件>选中列表中的"应用程序链接助理")。如果提示,请重新启动Studio
  2. 打开助手(工具>应用程序链接助手)
  3. 单击侧栏中的"打开URL映射编辑器"按钮
  4. 在对话框中创建/编辑IntentFilter
  5. 在"检查url映射"框中键入测试url

这不会告诉你为什么过滤器不起作用,但可以更快地进行试错测试。这让我明白了为什么我的过滤器不起作用(事实证明,我们不能在"端口"中放置通配符。我将scheme设置为http,主机过滤器设置为*,端口号为空(也尝试了*),并设置了一个pathPattern,但它只会匹配端口80(在任意主机上)

First-检查被调用组件是否在调用组件的父清单中声明。

如果被调用的组件是您的,而不在同一个应用程序中,请检查它是否在自己的清单中声明。

其他可能的问题-如果被调用的组件本身是正确的(坏的布局,小部件中被禁止的元素)

一些意向过滤器受系统保护。因此,在使用它之前需要获得许可。诀窍是知道你想要什么。一旦你知道你想要什么,你就可以查找可用的意向过滤器。

首选选项是学习遍历android源代码,并在清单中找到您要查找的内容。

最新更新