安装应用和免安装应用可能有不同的意图过滤器吗?

Posted

技术标签:

【中文标题】安装应用和免安装应用可能有不同的意图过滤器吗?【英文标题】:Possible to have different intent filters for installed app and instant app? 【发布时间】:2020-02-06 04:31:52 【问题描述】:

我目前正在使用旧功能插件来创建即时应用程序。在基本功能模块的 androidManifest 文件中,我有 Activity B,它按照“/pets/dogs/cages”模式监听意图

在我的应用程序模块的 AndroidManifest 文件中,我有 Activity C,它按照“pets/..*/cages”模式侦听意图。我还列出了正在使用“tools:node="replace" 的活动 B,以便忽略之前在功能模块中说明的过滤器。

这个设置的原因是因为我不想拦截用户点击的所有网络链接,我只想在他们已经完全安装了应用程序的情况下这样做。

此设置适用于旧功能插件,但在切换到应用程序包和动态​​功能时,我无法尝试实现相同的功能。

在旧设置中,应用程序模块的清单具有更高的优先级。但是,当迁移到新结构时,我想将功能模块更改为新的应用程序模块,将旧的应用程序模块更改为动态功能模块。

有什么建议吗?

【问题讨论】:

【参考方案1】:

问题是,在此之前,应用程序模块不包含在免安装应用中,因此您那里的意图过滤器配置已从免安装应用中排除。从技术上讲,tools:node="replace" 不应该起作用,因为您的 /dogs//..*/ 意图过滤器无论如何都在单独的活动中。您可能只观察到 Activity-C 处理所有 url,因为它的意图过滤器的覆盖范围包括 B,给予它更高的优先级。

但是,现在,无论是安装应用程序还是即时应用程序,应用程序和所有模块都已合并/包含。因此,您的 Activity-C 的意图过滤器处于领先地位。

一种方法是为您的已安装应用和免安装应用上传单独的捆绑包。您的即时捆绑包配置了/dogs/(带有无活动C 意图),您安装的捆绑包带有/..*/(带有无意图的B)。

(如果可能,您也可以将 B 和 C 组合到同一个活动中,这样您就不必在两个不同的活动之间切换意图过滤器配置)

【讨论】:

以上是关于安装应用和免安装应用可能有不同的意图过滤器吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤 ACTION_SEND 意图的特定应用程序(并为每个应用程序设置不同的文本)

Android深层链接(意图过滤器)数据大小限制?

两个应用程序图标显示 android。我的清单有问题吗?

当click_action被发送到应用程序的先前版本尚未添加意图过滤器的情况下如何处理?

从 Android 上的 gmail 应用程序下载附件的意图过滤器

用于过滤支付发送应用程序的意图过滤器