構文:
データタグが <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>
説明:
インテント フィルタにデータ指定を追加します。指定する内容は、データ型(mimeType 属性を使用)、URI、またはデータ型と URI の両方です。URI は、部分ごとに別個の属性を使用して指定します。

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

URI 形式を指定する各属性は省略可能ですが、相互に依存しています。

  • インテント フィルタに対して 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>

1 つの <intent-filter> 内に任意の数の <data> 要素を配置して、複数のデータ オプションを指定できます。いずれの属性も、デフォルト値は設定されていません。

インテント オブジェクトとフィルタのマッチング ルールなど、インテント フィルタの仕組みの詳細については、インテントとインテント フィルタ、およびマニフェスト ファイルの概要のインテント フィルタ セクションをご覧ください。

属性:
android:scheme
URI のスキーマ部分。これは、URI を指定するうえで最小限の必須属性です。フィルタに対して少なくとも 1 つの scheme 属性を設定する必要があります。この属性を設定していないと、他の URI 属性は意味を持ちません。

スキーマを指定する際は、末尾にコロンは付けません(たとえば、http: ではなく http)。

フィルタに対してデータ型セット(mimeType 属性を使用)が指定されていてスキーマが指定されていない場合、content:file: の schema 属性が指定されていると想定されます。

: Android フレームワーク内のスキーマ マッチングの場合、RFC とは異なり、大文字と小文字が区別されます。そのため、スキーマを指定する際は、常に小文字を使用してください。

android:host
URI 認証局のホスト部分。フィルタに対して scheme 属性も指定されていないと、この属性は意味を持ちません。複数のサブドメインにマッチさせるには、アスタリスク(*)を使用して、ホスト内の 0 個以上の文字にマッチさせます。たとえばホスト *.google.com は、www.google.com.google.comdeveloper.google.com にマッチします。

アスタリスクは host 属性の最初の文字にしか使えません。たとえばホスト google.co.* は、アスタリスク ワイルドカードが最初の文字ではないため無効です。

: Android フレームワーク内のホスト名マッチングの場合、正式な RFC とは異なり、大文字と小文字が区別されます。そのため、ホスト名を指定する際は、常に小文字を使用してください。

android:port
URI 認証局のポート部分。この属性は、フィルタに対して scheme 属性と host 属性も指定している場合に限り、意味を持ちます。
android:path
android:pathPrefix
android:pathSuffix
android:pathPattern
android:pathAdvancedPattern
URI のパス部分。「/」で始まる必要があります。path 属性は、Intent オブジェクトの完全パスに対してマッチングされる完全パスを指定します。pathPrefix 属性は、Intent オブジェクトのパスの最初の部分のみに対してマッチングされる部分パスを指定します。

pathSuffix 属性は、Intent オブジェクトのパスの末尾部分に対して完全にマッチングされます。この属性は「/」文字で始める必要はありません。

pathPattern 属性は、Intent オブジェクトの完全パスに対してマッチングされる完全パスを指定しますが、次のワイルドカードを含めることができます。

  • ピリオド(.)は任意の 1 文字に一致します。リテラル ピリオドを一致させるには、XML で \\. としてエスケープします。
  • アスタリスク(*)は、直前の文字が 0 個以上出現するシーケンスと一致します。たとえば、a* は「a」と「aa」に一致しますが、空の文字列には一致しません。
  • ピリオドとそれに続くアスタリスク(.*)は、0 個以上の文字のシーケンスに一致します。たとえば、.* は空の文字列に一致し、b.* は「b」、「bc」、「bcd」に一致します。

pathPattern に関する重要な考慮事項:

  • 後戻りなし: Android のパターン マッチャーは、後戻りなしで 1 回の順方向パスで文字列を評価します。ワイルドカードがパターンで後から必要になる文字を消費すると、照合は失敗します。
  • .* は遅延: .* ワイルドカードは遅延です。パターン内の次のリテラル文字が最初に出現するまで文字を消費します。
    • "abc.*xyz""abcpxqrxyz" と一致しません。.* は、最初の "x""px..." から)で遅延停止します。残りの文字列 "qrxyz" は、予期される "yz" と一致しません。
    • 警告: .* は完全一致する文字を探して停止するため、"a.*.c""abbbc" と一致しません。マッチャーは 2 つ目の . をリテラル ピリオドとして扱い、文字列をスキャンして "." を探します。文字列の末尾に達すると失敗します。
  • * は貪欲: アスタリスクが続く特定の文字(a* など)は貪欲です。先読みせずに、その文字の連続するすべての出現を読み進めます。
    • "a*a""aaa" などの文字列と一致しません。a* 部分は 3 つの "a" をすべて貪欲に消費します。パターンは最終的な "a" を想定していますが、文字列はすでに使い果たされているため、一致に失敗します。
  • ベスト プラクティス:
    • * の直後の文字がその前の文字と同じになるパターン(a*a など)は避けてください。
    • .* の直後にワイルドカード(.*..*.* など)を配置することは避けてください。
    • プレフィックスを照合する場合は、pathPattern.* で終了するのではなく、android:pathPrefix を使用する方が安全で効率的です。

pathAdvancedPattern 属性は、Intent オブジェクトの完全パスと照合される完全パスを指定し、次の正規表現に似たパターンをサポートします。

  • ピリオド(.)は任意の 1 文字に一致します。
  • 集合([...])は文字の範囲に一致します。たとえば、[0-5] は 0~5 の 1 つの数字に一致しますが、6~9 には一致しません。[a-zA-Z] は、任意の 1 つの英字に一致します。大文字と小文字は区別されません。集合は否定修飾子(^)もサポートします。
  • アスタリスク修飾子(*)は、直前のパターンの 0 回以上の繰り返しと一致します。
  • プラス修飾子(+)は、直前のパターンの 1 回以上の繰り返しと一致します。
  • 範囲修飾子(「{...}」)を使用すると、パターンが一致する回数を指定できます。
pathAdvancedPattern マッチャーは、リアルタイムでパターンを照合する評価実装です(後戻りはサポートしません)。

\ は、文字列を XML から読み取る際にエスケープ文字として使用されるため、パターンとして解析される前にダブル エスケープする必要があります。たとえば、リテラル *\\* と記述し、リテラル \\\\\ と記述します。これは、Java コードで文字列を作成する場合に必要な記述方法と基本的に同じです。

この 5 種類のパターンの詳細については、PatternMatcher クラスの PATTERN_LITERALPATTERN_PREFIXPATTERN_SIMPLE_GLOBPATTERN_SUFFIXPATTERN_ADVANCED_GLOB の説明をご覧ください。

これらの属性は、フィルタに対して scheme 属性と host 属性も指定している場合に限り、意味を持ちます。

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 クエリ パラメータ(および、必要に応じて値)のマッチャー。たとえば、?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 など)。サブタイプにアスタリスク ワイルドカード(*)を使用して、任意のサブタイプがマッチすることを示せます。

インテント フィルタの <data> 要素の宣言に android:mimeType 属性が含まれている場合、他に何も指定されていないのが一般的です。

: Android フレームワーク内の MIME タイプ マッチングの場合、正式な RFC MIME タイプとは異なり、大文字と小文字が区別されます。そのため、MIME タイプを指定する際は、常に小文字を使用してください。

導入時の API レベル:
API レベル 1
関連項目:
<action>
<category>