语法:
<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>
说明:
向 Intent 过滤器添加数据规范。该规范可以是只有数据类型(mimeType 属性),可以是只有 URI,也可以是既有数据类型又有 URI。URI 由其各个部分的单独属性指定:

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

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

  • 如果没有为 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] 匹配任何字母(不分大小写)。集还支持非 ^ 修饰符。
  • 星号(“*”)修饰符可与前面的模式匹配 0 次或多次。
  • 加号 (+) 修饰符可与前面的模式匹配 1 次或多次。
  • 范围(“{...}”)修饰符可用于指定模式可以匹配的次数。
pathAdvancedPattern 匹配器是一种简单的评估实现,其中可实时匹配相应模式,且不支持回溯。

由于在从 XML 读取字符串时(在将其解析为模式之前)将“\”用作转义字符,因此您需要进行双重转义:例如,字面量“*”将编写为“\\*”,字面量“\”将编写为“\\\\”。这基本上与采用 Java 代码构造字符串时需要编写的内容一样。

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

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

API 级别 31 中引入了 pathSuffixpathAdvancePattern

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

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

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

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