<data>

语法
<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:pathSuffix="string"
      android:pathAdvancedPattern="string"
      android:mimeType="string" />
包含在
<intent-filter>
描述
向意图过滤器添加数据规范。规范是数据类型,使用 mimeType 属性、URI 或数据类型和 URI。URI 由每个部分的单独属性指定

<scheme>://<host>:<port>[<path>|<pathPrefix>|<pathPattern>|<pathAdvancedPattern>|<pathSuffix>]

指定 URI 格式的这些属性是可选的,但也相互依赖

  • 如果 scheme 未为意图过滤器指定,则所有其他 URI 属性将被忽略。
  • 如果 host 未为过滤器指定,则 port 属性和所有路径属性将被忽略。

所有 <data> 元素都包含在同一个 <intent-filter> 元素中,它们对同一个过滤器做出贡献。例如,以下过滤器规范

<intent-filter . . . >
    <data android:scheme="something" android:host="project.example.com" />
    ...
</intent-filter>

等效于此规范

<intent-filter . . . >
    <data android:scheme="something" />
    <data android:host="project.example.com" />
    ...
</intent-filter>

您可以在 <intent-filter> 内放置任意数量的 <data> 元素,以使其具有多个数据选项。其属性均无默认值。

有关意图过滤器工作原理的信息,包括意图对象如何与过滤器匹配的规则,请参阅 意图和意图过滤器 和清单文件概述中的 意图过滤器 部分。

属性
android:scheme
URI 的 scheme 部分。这是指定 URI 的最基本属性。必须为过滤器设置至少一个 scheme 属性,否则其他 URI 属性都没有意义。

scheme 在不带尾部冒号的情况下指定,例如 http 而不是 http:

如果过滤器设置了数据类型(使用 mimeType 属性),但没有 scheme,则假定为 content:file: scheme。

注意:Android 框架中的 scheme 匹配区分大小写,这与 RFC 不同。因此,请始终使用小写字母指定 scheme。

android:host
URI 权限的主机部分。除非为过滤器也指定了scheme 属性,否则此属性毫无意义。要匹配多个子域名,请使用星号 (*) 匹配主机中的零个或多个字符。例如,主机 *.google.com 匹配 www.google.com.google.comdeveloper.google.com

星号必须是主机属性的第一个字符。例如,主机 google.co.* 无效,因为通配符星号不是第一个字符。

注意:与正式的 RFC 不同,Android 框架中的主机名匹配区分大小写。因此,始终使用小写字母指定主机名。

android:port
URI 权限的端口部分。仅当为过滤器也指定了 schemehost 属性时,此属性才有意义。
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
URI 的路径部分,必须以 / 开头。 path 属性指定一个完整路径,该路径与 Intent 对象中的完整路径进行匹配。 pathPrefix 属性指定一个部分路径,该路径仅与 Intent 对象中路径的初始部分进行匹配。

pathSuffix 属性与 Intent 对象中路径的结尾部分完全匹配,并且此属性不必以 / 字符开头。 pathPattern 属性指定一个完整路径,该路径与 Intent 对象中的完整路径进行匹配,但它可以包含以下通配符

  • 星号 (*) 匹配紧邻其前字符的零到多次出现。
  • 句点后跟星号 (.*) 匹配任何零到多个字符的序列。

pathAdvancedPattern 属性指定一个完整路径,该路径与 Intent 对象的完整路径进行匹配,并支持以下类似正则表达式的模式

  • 句点 (.) 匹配任何字符。
  • 集合 ([...]) 匹配字符范围。例如, [0-5] 匹配 0 到 5 之间的单个数字,但不匹配 6 到 9。 [a-zA-Z] 匹配任何字母,无论大小写。集合也支持“非”^ 修饰符。
  • 星号 (*) 修饰符匹配前一个模式零次或多次。
  • 加号 (+) 修饰符匹配前一个模式一次或多次。
  • 范围 ({...}) 修饰符指定模式可以匹配的次数。
pathAdvancedPattern 匹配器是一个评估实现,其中匹配是实时针对模式进行的,并且不支持回溯。

由于在从 XML 读取字符串时, \ 用作转义字符,因此在将其解析为模式之前,您需要进行双重转义。例如,文字 * 写成 \\*,文字 \ 写成 \\\。这就像您在 Java 代码中构造字符串时所写的那样。

有关这五种模式类型的更多信息,请参阅 PATTERN_LITERALPATTERN_PREFIXPATTERN_SIMPLE_GLOBPATTERN_SUFFIXPATTERN_ADVANCED_GLOBPatternMatcher 类中的描述。

仅当为过滤器也指定了 schemehost 属性时,这些属性才有意义。

pathSuffixpathAdvancedPattern 在 API 级别 31 中引入。

android:mimeType
MIME 媒体类型,例如 image/jpegaudio/mpeg4-generic。子类型可以是星号通配符 (*) 以指示任何子类型都匹配。

intent 过滤器通常会声明一个 <data> 元素,该元素仅包含 android:mimeType 属性。

注意:与正式的 RFC MIME 类型不同,Android 框架中的 MIME 类型匹配区分大小写。因此,始终使用小写字母指定 MIME 类型。

引入于
API 级别 1
另请参阅
<action>
<category>