<data>

语法
如果 data 标签是 <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" />

如果 data 标签是 <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="project1.example.com" />
    <data android:scheme="something-else" android:host="project2.example.com" android:path="/page1" />
    ...
</intent-filter>

等效于此

<intent-filter . . . >
    <data android:scheme="something" />
    <data android:scheme="something-else" />
    <data android:host="project1.example.com" />
    <data android:host="project2.example.com" />
    <data android:path="/page1" />
    ...
</intent-filter>

您可以在 <intent-filter> 中放置任意数量的 <data> 元素,以提供多个数据选项。它的所有属性都没有默认值。

有关 intent 过滤器如何工作的信息,包括 intent 对象与过滤器匹配的规则,请参阅“Intent 和 Intent 过滤器”以及清单文件概览中的“Intent 过滤器”部分。

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

指定 scheme 时不带冒号,例如 http 而不是 http:

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

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

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

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

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

android:port
URI 授权的 port 部分。此属性仅在过滤器也指定了 schemehost 属性时有意义。
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
URI 的 path 部分,必须以 / 开头。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 属性时有意义。

pathSuffixpathAdvancedPattern 是在 API 级别 31 中引入的。

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 查询参数(可选包含值)的匹配器。例如,您可以使用 <data android:query="param=value" /> 匹配以 ?param=value 结尾的 URI。不包括 ? 前缀。每个属性的含义和允许的模式参见上文。

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

在 API 级别 35 中引入。

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

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

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

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