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

หากแท็กข้อมูลเป็นแท็กย่อยโดยตรงของ <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>
description:
เพิ่มข้อกําหนดข้อมูลลงในตัวกรอง Intent ข้อกำหนดคือ ประเภทข้อมูลโดยใช้แอตทริบิวต์ mimeType , URI หรือทั้งประเภทข้อมูลและ URI URI จะระบุโดยแอตทริบิวต์แยกกัน สำหรับแต่ละส่วน

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

แอตทริบิวต์ที่ระบุรูปแบบ URI เหล่านี้เป็นแอตทริบิวต์ที่ไม่บังคับ แต่ก็ขึ้นอยู่กับกันและกันด้วย

  • หากไม่ได้ระบุ scheme สำหรับตัวกรอง Intent ระบบจะละเว้นแอตทริบิวต์ URI อื่นๆ ทั้งหมด
  • หากไม่ได้ระบุ host สำหรับตัวกรอง ระบบจะไม่สนใจแอตทริบิวต์ port และแอตทริบิวต์เส้นทางทั้งหมด

องค์ประกอบ <data> ทั้งหมดที่อยู่ในองค์ประกอบ <intent-filter> เดียวกันจะมีส่วนร่วมใน ตัวกรองเดียวกัน เช่น ข้อกำหนดตัวกรองต่อไปนี้

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

คุณวางองค์ประกอบ <data> จำนวนเท่าใดก็ได้ภายใน <intent-filter> เพื่อให้มีตัวเลือกข้อมูลหลายรายการ ไม่มีแอตทริบิวต์ใดที่มีค่าเริ่มต้น

ดูข้อมูลเกี่ยวกับวิธีการทำงานของตัวกรอง Intent รวมถึงกฎเกี่ยวกับวิธีจับคู่ออบเจ็กต์ Intent กับตัวกรองได้ที่ส่วนIntent และตัวกรอง Intent และส่วนตัวกรอง Intent ในภาพรวมของไฟล์ Manifest

แอตทริบิวต์
android:scheme
ส่วนรูปแบบของ URI นี่คือแอตทริบิวต์ที่จำเป็นขั้นต่ำสำหรับ การระบุ URI ต้องตั้งค่าแอตทริบิวต์ scheme อย่างน้อย 1 รายการ สำหรับตัวกรอง มิเช่นนั้นแอตทริบิวต์ URI อื่นๆ จะไม่มีความหมาย

มีการระบุรูปแบบโดยไม่มีเครื่องหมายโคลอนต่อท้าย เช่น http แทนที่จะเป็น http:

หากตัวกรองมีการตั้งค่าประเภทข้อมูล (โดยใช้แอตทริบิวต์ mimeType ) แต่ไม่มีรูปแบบ ระบบจะถือว่าใช้รูปแบบ content: และ file:

หมายเหตุ: การจับคู่รูปแบบในเฟรมเวิร์ก Android จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งแตกต่างจาก RFC ดังนั้น ให้ระบุรูปแบบ โดยใช้ตัวอักษรพิมพ์เล็กเสมอ

android:host
ส่วนโฮสต์ของ URI Authority แอตทริบิวต์นี้ไม่มีความหมาย เว้นแต่จะมีการระบุแอตทริบิวต์ scheme สำหรับตัวกรองด้วย หากต้องการจับคู่โดเมนย่อยหลายรายการ ให้ใช้เครื่องหมายดอกจัน (*) เพื่อ จับคู่อักขระ 0 ตัวขึ้นไปในโฮสต์ เช่น โฮสต์ *.google.com จะตรงกับ www.google.com, .google.com และ developer.google.com

เครื่องหมายดอกจันต้องเป็นอักขระแรกของแอตทริบิวต์โฮสต์ เช่น โฮสต์ 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 แต่สามารถมีอักขระไวลด์การ์ดต่อไปนี้

  • จุด (.) จะจับคู่กับอักขระใดก็ได้
  • เครื่องหมายดอกจัน (*) จะจับคู่กับลำดับของอักขระที่อยู่ก่อนหน้า ซึ่งอาจปรากฏ 0 ครั้งหรือหลายครั้งก็ได้
  • จุดตามด้วยเครื่องหมายดอกจัน (.*) จะจับคู่กับลำดับอักขระใดก็ได้ตั้งแต่ 0 ตัวขึ้นไป

แอตทริบิวต์ pathAdvancedPattern ระบุเส้นทางที่สมบูรณ์ ซึ่งจะจับคู่กับเส้นทางที่สมบูรณ์ของออบเจ็กต์ Intent และรองรับรูปแบบที่คล้ายกับนิพจน์ทั่วไปต่อไปนี้

  • จุด (.) จะจับคู่กับอักขระใดก็ได้
  • ชุด ([...]) จะตรงกับช่วงของอักขระ เช่น [0-5] จะตรงกับตัวเลขตั้งแต่ 0 ถึง 5 แต่ไม่ตรงกับตัวเลขตั้งแต่ 6 ถึง 9 [a-zA-Z] ตรงกับตัวอักษรใดก็ได้ ไม่ว่าจะตัวพิมพ์เล็กหรือตัวพิมพ์ใหญ่ นอกจากนี้ ชุดยังรองรับตัวแก้ไข "not" ^ ด้วย
  • ตัวแก้ไขเครื่องหมายดอกจัน (*) จะจับคู่รูปแบบก่อนหน้า 0 ครั้งขึ้นไป
  • ตัวแก้ไขเครื่องหมายบวก (+) จะจับคู่รูปแบบก่อนหน้าอย่างน้อย 1 ครั้ง
  • ตัวแก้ไขช่วง ({...}) จะระบุจำนวนครั้งที่รูปแบบ สามารถจับคู่ได้
pathAdvancedPattern ตัวจับคู่คือการติดตั้งใช้งานการประเมินซึ่งการจับคู่ จะดำเนินการกับรูปแบบแบบเรียลไทม์โดยไม่รองรับการย้อนกลับ

เนื่องจาก\ใช้เป็นอักขระหลีกเมื่ออ่านสตริงจาก XML คุณจึงต้องหลีกสองครั้งก่อนที่จะแยกวิเคราะห์เป็นรูปแบบ เช่น เขียนอักขระ * เป็น \\* และเขียนอักขระ \ เป็น \\\\ ซึ่งคล้ายกับสิ่งที่คุณเขียนเมื่อ สร้างสตริงในโค้ด Java

ดูข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบทั้ง 5 ประเภทนี้ได้ในคำอธิบายของ PATTERN_LITERAL, PATTERN_PREFIX, PATTERN_SIMPLE_GLOB, PATTERN_SUFFIX และ PATTERN_ADVANCED_GLOB ในคลาส PatternMatcher

แอตทริบิวต์เหล่านี้จะมีความหมายก็ต่อเมื่อมีการระบุแอตทริบิวต์ scheme และ host สำหรับตัวกรองด้วย

pathSuffix และ pathAdvancedPattern เปิดตัวใน 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 (และค่าหากมี) เช่น คุณสามารถจับคู่ URI ที่ลงท้ายด้วย ?param=value กับ <data android:query="param=value" /> อย่าใส่คำนำหน้า ? ดูความหมายและรูปแบบที่อนุญาตในแต่ละแอตทริบิวต์ได้ที่ด้านบน

หากต้องการจับคู่อักขระที่มักจะเข้ารหัส URI ให้รวมรูปแบบดิบ (ไม่ได้เข้ารหัส) ไว้ในค่าแอตทริบิวต์ เช่น <data android:query="test!" /> ตรงกับ ?test! และ ?test%21

เปิดตัวใน API ระดับ 35

android:mimeType
ประเภทสื่อ MIME เช่น image/jpeg หรือ audio/mpeg4-generic ประเภทย่อยอาจเป็นไวลด์การ์ดดอกจัน (*) เพื่อระบุว่าประเภทย่อยใดก็ได้ที่ตรงกัน

โดยทั่วไปแล้ว ตัวกรองความตั้งใจจะประกาศองค์ประกอบ <data> ที่มีเฉพาะแอตทริบิวต์ android:mimeType

หมายเหตุ: การจับคู่ประเภท MIME ในเฟรมเวิร์ก Android จะ คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งต่างจากประเภท MIME ของ RFC อย่างเป็นทางการ ดังนั้น ให้ระบุประเภท MIME โดยใช้ตัวอักษรพิมพ์เล็กเสมอ

เปิดตัวใน
API ระดับ 1
ดูเพิ่มเติม
<action>
<category>