支持深层链接

1.2.0 版开始,Navigation 3 支持使用 DeepLinkRequestDeepLinkMatcher 类深层链接到 应用中的目的地。

如需在应用中支持深层链接,请完成以下步骤:

  1. AndroidManifest.xml定义 intent 过滤器 ,以指定应用可以处理哪些 URI。
  2. 创建 DeepLinkMatcher 实例,以将传入请求映射到您的 导航键。
  3. 在 activity 的 onCreateonNewIntent 方法中匹配传入请求 ,并相应地更新返回堆栈。

创建 DeepLinkRequest

DeepLinkRequest 表示传入的深层链接。它包含 DeepLinkUri和可选的RequestExtras,其中包含其他 信息,例如 intent 操作或 MIME 类型。

提供 DeepLinkRequest extra

如需存储与深层链接相关的其他信息,请使用 RequestExtras 类。为了使定义和实例化 extra 类型安全, 该库提供了 RequestExtrasKey 接口和 requestExtras DSL。

此外,该库还提供了两个 extra 键和关联的帮助程序:

如需定义自己的自定义 extra,请使用类型化泛型实现 RequestExtrasKey 接口:

您还可以使用 emptyRequestExtras() 构造空实例,或 使用 + (plus) 和 - (minus) 运算符组合 extra。

Intent 创建 DeepLinkRequest

在 Android 上,您可以直接从 Intent 创建 DeepLinkRequest。以这种方式构造时,DeepLinkRequest 的构建方式如下:

  • uri 是从 intent 的 data 字段复制的。
  • 如果 MIME 类型和操作 extra 不为 null,则会从 相应的 intent 字段进行设置。
  • 所有具有非 null 值的 intent.extras 都会另存为 SavedState 中的 DeepLinkRequest.IntentExtrasKey
  • 使用 extras 参数提供的任何其他 extra 都会添加。

DeepLinkMatcher 将传入的 DeepLinkRequest 实例映射到 可以添加到应用的返回堆栈的导航键。Navigation 3 提供了三个内置匹配器:UriDeepLinkMatcher 用于 基于模式的 URI 匹配、StaticKeyDeepLinkMatcher 用于基本链接,以及 BackStackMatcher 用于构建合成返回堆栈。该库还 支持自定义匹配器,以用于内置 匹配器未涵盖的用例。

如需了解详情,请参阅创建 DeepLinkMatcher

添加 intent 过滤器

如需启用深层链接以启动 activity,您必须在应用的 AndroidManifest.xml 中定义匹配的 <intent-filter> 元素。如需了解更多 信息,请参阅为传入链接添加 intent 过滤器

匹配传入请求

创建 您的 DeepLinkMatcher 实例后,您可以在 activity 中匹配 传入请求。

如需匹配传入请求,请完成以下步骤:

  1. 实例化 DeepLinkMatcher 实例。
  2. 整理 所有 DeepLinkMatcher 实例,无论是显式整理还是 使用 多重绑定整理。
  3. 从传入的 Intent 创建 DeepLinkRequest
  4. 匹配 所有匹配器的请求,并找到最佳匹配项。
  5. 根据匹配结果创建 返回堆栈。