<数据>

语法:
如果数据标记是 <intent-filter> 的直接子标记:
<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" />

如果数据标记是 <uri-relative-filter-group> 的直接子标记:
<data
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:pathSuffix="string"
      android:pathAdvancedPattern="string"
      android:fragment="string"
      android:fragmentPattern="string"
      android:fragmentPrefix="string"
      android:fragmentSuffix="string"
      android:fragmentAdvancedPattern="string"
      android:query="string"
      android:queryPattern="string"
      android:queryPrefix="string"
      android:querySuffix="string"
      android:queryAdvancedPattern="string" />
包含于:
<intent-filter>
<uri-relative-filter-group>
说明:
向 intent 过滤器添加数据规范。该规范指数据类型,即使用 mimeType 属性、URI 或同时使用数据类型和 URI。URI 由其各个部分的单独属性指定:

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

用于指定 URI 的以下属性是可选的,但也相互依赖:

  • 如果没有为 intent 过滤器指定 scheme,则系统会忽略其他所有 URI 属性。
  • 如果没有为过滤器指定 host,则系统会忽略 port 属性以及所有路径属性。

同一 <intent-filter> 元素中包含的所有 <data> 元素都对同一过滤器起作用。例如,以下过滤器规范:

<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> 元素,为其提供多个数据选项。它的属性都没有默认值。

如需了解 intent 过滤器的工作原理,包括如何根据过滤器来匹配 intent 对象的规则,请参阅清单文件概览中的 intent 和 intent 过滤器以及 intent 过滤器部分。

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

指定的架构应不带尾随冒号,例如,应指定 http,而不是 http:

如果为过滤器设置了数据类型(使用 mimeType 属性),但未设置架构,则采用 content:file: 架构。

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

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

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

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

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 代码中构造字符串时编写的内容一样。

如需详细了解这三种类型的模式,请参阅 PatternMatcher 类中的 PATTERN_LITERALPATTERN_PREFIXPATTERN_SIMPLE_GLOBPATTERN_SUFFIXPATTERN_ADVANCED_GLOB 的说明。

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

API 级别 31 中引入了 pathSuffixpathAdvancedPattern

android:fragment
android:fragmentPrefix
android:fragmentSuffix
android:fragmentPattern
android:fragmentAdvancedPattern

URI 片段的匹配器。请勿添加 # 前缀。如需了解每个属性的含义和允许的模式,请参阅上文。

如需匹配通常采用 URI 编码的字符,请在属性值中添加原始(未编码)形式。例如,<data android:fragment="test!" />#test!#test%21 匹配。

此项为 API 级别 35 中的新增配置。

android:query
android:queryPrefix
android:querySuffix
android:queryPattern
android:queryAdvancedPattern

URI 查询参数(以及可选的值)的匹配器。例如,您可以将以 ?param=value 结尾的 URI 与 <data android:query="param=value" /> 进行匹配。 请勿添加 ? 前缀。如需了解每个属性的含义和允许的模式,请参阅上文。

如需匹配通常采用 URI 编码的字符,请在属性值中添加原始(未编码)形式。例如,<data android:query="test!" />?test!?test%21 匹配。

此项为 API 级别 35 中的新增配置。

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

intent 过滤器经常会声明仅包含 android:mimeType 属性的 <data> 元素。

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

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