- ไวยากรณ์:
- หากแท็กข้อมูลเป็นแท็กย่อยของ
<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 แอตทริบิวต์นี้ไม่มีความหมาย
เว้นแต่จะมีการระบุแอตทริบิวต์
schemeสำหรับตัวกรองด้วย หากต้องการจับคู่โดเมนย่อยหลายรายการ ให้ใช้เครื่องหมายดอกจัน (*) เพื่อ จับคู่อักขระ 0 ตัวขึ้นไปในโฮสต์ เช่น โฮสต์*.google.comจะตรงกับwww.google.com,.google.comและdeveloper.google.comเครื่องหมายดอกจันต้องเป็นอักขระแรกของแอตทริบิวต์โฮสต์ เช่น โฮสต์
google.co.*ไม่ถูกต้องเนื่องจากไวลด์การ์ดอกจันไม่ใช่ตัวอักษรแรกหมายเหตุ: การจับคู่ชื่อโฮสต์ในเฟรมเวิร์ก Android จะคำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งแตกต่างจาก RFC อย่างเป็นทางการ ดังนั้น ให้ระบุชื่อโฮสต์โดยใช้ตัวอักษรพิมพ์เล็กเสมอ
android:port- ส่วนพอร์ตของโดเมน/โฮสต์ของ URI แอตทริบิวต์นี้จะมีความหมายก็ต่อเมื่อมีการระบุแอตทริบิวต์
schemeและhostสำหรับตัวกรองด้วย android:pathandroid:pathPrefixandroid:pathSuffixandroid:pathPatternandroid:pathAdvancedPattern- ส่วนเส้นทางของ URI ซึ่งต้องขึ้นต้นด้วย
/แอตทริบิวต์pathระบุเส้นทางที่สมบูรณ์ซึ่งตรงกับเส้นทางที่สมบูรณ์ในออบเจ็กต์Intentแอตทริบิวต์pathPrefixระบุเส้นทางบางส่วนที่ตรงกับ เฉพาะส่วนเริ่มต้นของเส้นทางในออบเจ็กต์Intentแอตทริบิวต์
pathSuffixจะตรงกับส่วนท้ายของเส้นทางในออบเจ็กต์Intentอย่างแน่นอน และแอตทริบิวต์นี้ไม่จำเป็นต้องขึ้นต้นด้วยอักขระ/แอตทริบิวต์
pathPatternระบุเส้นทางที่สมบูรณ์ซึ่งตรงกับเส้นทางที่สมบูรณ์ในออบเจ็กต์Intentแต่สามารถมีอักขระไวลด์การ์ดต่อไปนี้-
จุด (
.) จะจับคู่กับอักขระเดี่ยวตัวใดก็ได้ หากต้องการจับคู่เครื่องหมายจุดตามตัวอักษร ให้ยกเว้น เครื่องหมายดังกล่าวเป็น\\.ใน XML -
เครื่องหมายดอกจัน (
*) จะจับคู่กับลำดับของอักขระที่อยู่ก่อนหน้า ซึ่งอาจปรากฏ 0 ครั้งหรือหลายครั้งก็ได้ เช่นa*จะตรงกับ "a" และ "aa" แต่ไม่ตรงกับสตริงว่าง -
จุดที่ตามด้วยเครื่องหมายดอกจัน (
.*) จะจับคู่กับลำดับอักขระใดก็ได้ตั้งแต่ 0 ตัวขึ้นไป เช่น.*จะตรงกับสตริงว่าง และb.*จะตรงกับ "b" "bc" และ "bcd"
ข้อควรพิจารณาที่สำคัญสำหรับ
pathPattern- ไม่มีการย้อนรอย: ตัวจับคู่รูปแบบของ Android จะประเมินสตริงในการส่งต่อครั้งเดียวโดยไม่มีการย้อนรอย หากไวลด์การ์ดใช้ตัวอักษรที่จำเป็นในภายหลัง ในรูปแบบ การจับคู่จะล้มเหลว
-
.*เป็นแบบ Lazy: ไวลด์การ์ด.*เป็นแบบ Lazy โดยจะใช้ อักขระจนกว่าจะพบอักขระตามตัวอักษรตัวถัดไปตัวแรกใน รูปแบบ-
"abc.*xyz"จะไม่ตรงกับ"abcpxqrxyz".*จะหยุดอย่างช้าๆ ที่"x"ตัวแรก (จาก"px...") สตริงที่เหลือ"qrxyz"จะไม่ตรงกับ"yz"ที่คาดไว้ -
คำเตือน: เนื่องจาก
.*มองหาอักขระที่ตรงกันทุกประการเพื่อ หยุด"a.*.c"จึงไม่ตรงกับ"abbbc"ตัวจับคู่จะถือว่า.ตัวที่ 2 เป็นจุดตามตัวอักษรและสแกนสตริงเพื่อหา"."โดยจะล้มเหลวเมื่อถึงจุดสิ้นสุด
-
-
*เป็นแบบ Greedy: อักขระที่เฉพาะเจาะจงตามด้วยเครื่องหมายดอกจัน (เช่นa*) จะเป็นแบบ Greedy โดยจะใช้ทั้งหมดของอักขระที่ต่อเนื่องกัน โดยไม่ต้องดูข้างหน้า-
"a*a"จะไม่ตรงกับสตริง เช่น"aaa"ส่วนa*จะใช้"a"ทั้ง 3 ตัวอย่างตะกละตะกลาม รูปแบบ คาดหวัง"a"สุดท้าย แต่สตริงหมดแล้ว ทำให้การจับคู่ไม่สำเร็จ
-
- แนวทางปฏิบัติแนะนำ:
-
หลีกเลี่ยงรูปแบบที่อักขระซึ่งอยู่ต่อจาก
*เหมือนกับอักขระที่อยู่ก่อนหน้า (เช่นa*a) -
หลีกเลี่ยงการวางอักขระไวด์การ์ดทันทีหลังจาก
.*(เช่น.*.หรือ.*.*) -
หากต้องการจับคู่คำนำหน้า การใช้
android:pathPrefixจะปลอดภัยและมีประสิทธิภาพมากกว่าการลงท้ายpathPatternด้วย.*
-
หลีกเลี่ยงรูปแบบที่อักขระซึ่งอยู่ต่อจาก
แอตทริบิวต์
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:fragmentandroid:fragmentPrefixandroid:fragmentSuffixandroid:fragmentPatternandroid:fragmentAdvancedPattern-
ตัวจับคู่สำหรับส่วนย่อย URI ไม่ต้องใส่คำนำหน้า
#ดูความหมายและรูปแบบที่อนุญาตในแต่ละแอตทริบิวต์ได้ที่ด้านบนหากต้องการจับคู่อักขระที่มักจะเข้ารหัส URI ให้รวมรูปแบบดิบ (ไม่ได้เข้ารหัส) ไว้ในค่าแอตทริบิวต์ เช่น
<data android:fragment="test!" />ตรงกับ#test!และ#test%21เปิดตัวในระดับ API 35
android:queryandroid:queryPrefixandroid:querySuffixandroid:queryPatternandroid: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ประเภทย่อยอาจเป็นไวลด์การ์ดดอกจัน (*) เพื่อระบุว่าประเภทย่อยใดก็ได้ที่ตรงกันโดยทั่วไปแล้ว ตัวกรอง Intent จะประกาศองค์ประกอบ
<data>ที่มีเฉพาะแอตทริบิวต์android:mimeTypeหมายเหตุ: การจับคู่ประเภท MIME ในเฟรมเวิร์ก Android จะ คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ ซึ่งต่างจากประเภท MIME ของ RFC อย่างเป็นทางการ ดังนั้น ให้ระบุประเภท MIME โดยใช้ตัวอักษรพิมพ์เล็กเสมอ
- เปิดตัวใน
- ระดับ API 1
- ดูเพิ่มเติม
<action><category>
<data>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2026-04-21 UTC
[[["เข้าใจง่าย","easyToUnderstand","thumb-up"],["แก้ปัญหาของฉันได้","solvedMyProblem","thumb-up"],["อื่นๆ","otherUp","thumb-up"]],[["ไม่มีข้อมูลที่ฉันต้องการ","missingTheInformationINeed","thumb-down"],["ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป","tooComplicatedTooManySteps","thumb-down"],["ล้าสมัย","outOfDate","thumb-down"],["ปัญหาเกี่ยวกับการแปล","translationIssue","thumb-down"],["ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด","samplesCodeIssue","thumb-down"],["อื่นๆ","otherDown","thumb-down"]],["อัปเดตล่าสุด 2026-04-21 UTC"],[],[]]