<dados>

Sintaxe:
Se a tag de dados for filha imediata de um <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" />

Se a tag de dados for filha imediata de um <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" />
contido em:
<intent-filter>
<uri-relative-filter-group>
descrição:
Adiciona uma especificação de dados a um filtro de intent. A especificação é um tipo de dados, usando o atributo mimeType, um URI ou um tipo de dados e um URI. Um URI é especificado por atributos diferentes para cada uma das partes:

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

Os atributos que especificam o formato de URI são opcionais, mas também mutuamente dependentes:

  • Se um scheme não for especificado para o filtro de intent, todos os outros atributos de URI serão ignorados.
  • Se um host não for especificado para o filtro, o atributo port e todos os atributos de caminho serão ignorados.

Todos os elementos <data> contidos no mesmo elemento <intent-filter> contribuem para o mesmo filtro. Por exemplo, a especificação de filtro abaixo:

<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>

é equivalente a:

<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>

Você pode colocar quantos elementos <data> quiser dentro de um <intent-filter> para dar várias opções de dados a ele. Nenhum dos atributos tem valores padrão.

Para mais informações sobre como os filtros de intent funcionam, incluindo as regras de correspondência dos objetos de intent com os filtros, consulte Intents e filtros de intent e a seção Filtros de intent na visão geral do arquivo de manifesto.

atributos:
android:scheme
Parte do esquema de um URI. Esse é o atributo essencial mínimo para especificar um URI. Pelo menos um atributo scheme precisa ser definido para o filtro. Caso contrário, nenhum dos outros atributos de URI será significativo.

Um esquema é especificado sem os dois-pontos à direita, como http em vez de http:.

Se o filtro tiver um tipo de dados definido (usando o atributo mimeType) e nenhum esquema, os esquemas content: e file: vão ser usados.

Observação: a correspondência de esquemas no framework do Android diferencia maiúsculas de minúsculas, ao contrário do RFC. Como resultado, sempre especifique esquemas usando letras minúsculas.

android:host
A parte do host de uma autoridade de URI. Esse atributo é insignificante, a menos que um atributo scheme também seja especificado para o filtro. Use um asterisco (*) para corresponder a vários subdomínios e de zero a mais caracteres no host. Por exemplo, o host *.google.com corresponde a www.google.com, .google.com e developer.google.com.

O asterisco precisa ser o primeiro caractere do atributo do host. Por exemplo, o host google.co.* é inválido porque o caractere curinga de asterisco não é o primeiro caractere.

Observação: a correspondência do nome do host no framework do Android diferencia maiúsculas de minúsculas, ao contrário do RFC formal. Como resultado, sempre especifique nomes de host usando letras minúsculas.

android:port
A parte da porta de uma autoridade de URI. Esse atributo só é significativo se os atributos scheme e host também forem especificados para o filtro.
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
A parte do caminho de um URI, que precisa começar com /. O atributo path especifica um caminho completo que corresponde ao caminho completo em um objeto Intent. O atributo pathPrefix especifica um caminho parcial que corresponde somente à parte inicial do caminho no objeto Intent.

O atributo pathSuffix corresponde exatamente à parte final do caminho no objeto Intent, e esse atributo não precisa começar com o caractere /.

O atributo pathPattern especifica um caminho completo que corresponde ao caminho completo no objeto Intent e pode conter os caracteres curinga abaixo:

  • Um ponto (.) corresponde a qualquer caractere único. Para corresponder a um ponto literal, faça o escape dele como \\. no XML.
  • Um asterisco (*) corresponde a uma sequência de zero a várias ocorrências do caractere imediatamente anterior. Por exemplo, a* corresponde a "a" e "aa", mas não corresponde a uma string vazia.
  • Um ponto seguido por um asterisco (.*) corresponde a qualquer sequência de zero ou mais caracteres. Por exemplo, .* corresponde a uma string vazia, e b.* corresponde a "b", "bc" e "bcd".

Considerações importantes para pathPattern:

  • Sem retrocesso: o matcher de padrões do Android avalia strings em uma única passagem direta sem retrocesso. Se um caractere curinga consumir caracteres necessários mais tarde no padrão, a correspondência vai falhar.
  • .* é preguiçoso:o caractere curinga .* é preguiçoso. Ele consome caracteres até encontrar a primeira ocorrência do próximo caractere literal no padrão.
    • "abc.*xyz" não vai corresponder a "abcpxqrxyz". O .* para preguiçosamente no primeiro "x" (de "px..."). A string restante "qrxyz" não corresponde ao "yz" esperado.
    • Aviso:como .* procura uma correspondência exata de caracteres para parar, "a.*.c" **não** vai corresponder a "abbbc". O matcher trata o segundo . como um ponto literal e verifica a string procurando um ".", falhando quando chega ao fim.
  • * é ganancioso: Um caractere específico seguido por um asterisco (como a*) é ganancioso. Ele consome todas as ocorrências consecutivas desse caractere sem olhar para frente.
    • "a*a" não vai corresponder a strings como "aaa". A parte a* consome gananciosamente todos os três "a"s. O padrão espera o "a" final, mas a string já está esgotada, fazendo com que a correspondência falhe.
  • Práticas recomendadas:
    • Evite padrões em que o caractere imediatamente após um * seja o mesmo que o caractere anterior (por exemplo, a*a).
    • Evite colocar caracteres curinga imediatamente após .* (por exemplo, .*. ou .*.*).
    • Se você pretende corresponder a um prefixo, é mais seguro e eficiente usar android:pathPrefix em vez de terminar um pathPattern com .*.

O atributo pathAdvancedPattern especifica um caminho completo, que corresponde ao caminho completo do objeto Intent e oferece suporte a estes padrões parecidos com o regex:

  • Um ponto (.) faz correspondência com qualquer caractere.
  • Um conjunto ([...]) corresponde a intervalos de caracteres. Por exemplo, [0-5] corresponde a um único dígito de 0 a 5, mas não de 6 a 9. [a-zA-Z] corresponde a qualquer letra, independente de ser maiúscula ou minúscula. Os conjuntos também oferecem suporte ao modificador "not" ^.
  • O modificador de asterisco (*) corresponde ao padrão anterior zero ou mais vezes.
  • O modificador de adição (+) corresponde ao padrão anterior uma ou mais vezes.
  • O modificador de intervalo ({...}) especifica o número de vezes que um padrão pode fazer correspondência.
O matcher pathAdvancedPattern é uma implementação de avaliação em que a correspondência com o padrão é realizada em tempo real e sem suporte a retrocessos.

Como \ é usado como caractere de escape quando a string é lida do XML, antes de fazer a análise como padrão, você precisa do escape duplo. Por exemplo, um * literal é escrito como \\* e um \ literal é escrito como \\\\. Isso é o que você escreve ao criar a string no código Java.

Para mais informações sobre esses tipos de padrões, consulte as descrições de PATTERN_LITERAL, PATTERN_PREFIX, PATTERN_SIMPLE_GLOB, PATTERN_SUFFIX e PATTERN_ADVANCED_GLOB na classe PatternMatcher.

Esses atributos são significativos somente se os atributos scheme e host também forem especificados para o filtro.

pathSuffix e pathAdvancedPattern foram introduzidos no nível 31 da API.

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

Um matcher para um fragmento de URI. Não inclua o prefixo #. Consulte acima o significado de e os padrões permitidos em cada atributo.

Para corresponder a caracteres que geralmente são codificados por URI, inclua o formato bruto (não codificado) no valor do atributo. Por exemplo, <data android:fragment="test!" /> corresponde a #test! e #test%21.

Introduzido no nível 35 da API.

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

Um matcher para um parâmetro de consulta de URI (e, opcionalmente, um valor). Por exemplo, é possível corresponder URIs que terminam em ?param=value com <data android:query="param=value" />. Não inclua o prefixo ?. Consulte acima o significado de e os padrões permitidos em cada atributo.

Para corresponder a caracteres que geralmente são codificados por URI, inclua o formato bruto (não codificado) no valor do atributo. Por exemplo, <data android:query="test!" /> corresponde a ?test! e ?test%21.

Introduzido no nível 35 da API.

android:mimeType
Um tipo de mídia MIME, como image/jpeg ou audio/mpeg4-generic. O subtipo pode ser o asterisco curinga (*) para indicar que qualquer subtipo faz a correspondência.

É comum que um filtro de intent declare um elemento <data> que inclua somente o atributo android:mimeType.

Observação: a correspondência de tipo MIME no framework do Android diferencia maiúsculas de minúsculas, ao contrário dos tipos RFC MIME formais. Como resultado, sempre especifique tipos MIME usando letras minúsculas.

introduzido no:
Nível 1 da API
confira também:
<action>
<category>