- ไวยากรณ์:
-
<provider android:authorities="list" android:directBootAware=["true" | "false"] android:enabled=["true" | "false"] android:exported=["true" | "false"] android:grantUriPermissions=["true" | "false"] android:icon="drawable resource" android:initOrder="integer" android:label="string resource" android:multiprocess=["true" | "false"] android:name="string" android:permission="string" android:process="string" android:readPermission="string" android:syncable=["true" | "false"] android:writePermission="string" > ... </provider>
- มีอยู่ใน
-
<application> - อาจมีข้อมูลต่อไปนี้
<meta-data><grant-uri-permission><intent-filter><path-permission><property>- คำอธิบาย:
-
ประกาศคอมโพเนนต์ผู้ให้บริการเนื้อหา ContentProvider เป็นคลาสย่อยของ
ContentProviderที่ให้การเข้าถึงข้อมูลที่มีโครงสร้างซึ่งจัดการโดยแอปพลิเคชัน คุณต้องกำหนดผู้ให้บริการเนื้อหาทั้งหมดในแอปพลิเคชันไว้ในองค์ประกอบ<provider>ในไฟล์ Manifest มิฉะนั้น ระบบจะไม่รู้จักไฟล์เหล่านั้น และจะไม่เรียกใช้ประกาศเฉพาะผู้ให้บริการเนื้อหาที่เป็นส่วนหนึ่งของแอปพลิเคชันของคุณ อย่าประกาศผู้ให้บริการเนื้อหาใน แอปพลิเคชันอื่นๆ ที่คุณใช้ในแอปพลิเคชัน
ระบบ Android จะจัดเก็บการอ้างอิงถึงผู้ให้บริการเนื้อหาตามสตริงการให้สิทธิ์ ซึ่งเป็นส่วนหนึ่งของ URI เนื้อหาของผู้ให้บริการ เช่น สมมติว่าคุณต้องการ เข้าถึงผู้ให้บริการเนื้อหาที่จัดเก็บข้อมูลเกี่ยวกับผู้ประกอบวิชาชีพด้านสาธารณสุข หากต้องการทำเช่นนี้ ให้เรียกใช้เมธอด
ContentResolver.query()ซึ่งรับ URI ที่ระบุผู้ให้บริการ รวมถึงอาร์กิวเมนต์อื่นๆ ดังนี้content://com.example.project.healthcareprovider/nurses/rn
content:schemeจะระบุ URI เป็น URI เนื้อหาที่ชี้ไปยัง ผู้ให้บริการเนื้อหาของ Android โดยหน่วยงานcom.example.project.healthcareproviderจะระบุตัวผู้ให้บริการเอง ระบบ Android จะค้นหาผู้มีอำนาจในรายการผู้ให้บริการที่รู้จักและผู้มีอำนาจของผู้ให้บริการเหล่านั้น สตริงย่อยnurses/rnคือเส้นทางที่ผู้ให้บริการเนื้อหาใช้ เพื่อระบุชุดข้อมูลย่อยของผู้ให้บริการเมื่อกำหนดผู้ให้บริการในองค์ประกอบ
<provider>คุณจะไม่ใส่สคีมาหรือเส้นทางในอาร์กิวเมนต์android:nameแต่จะใส่อำนาจเท่านั้นดูข้อมูลเกี่ยวกับการใช้และพัฒนาผู้ให้บริการเนื้อหาได้ที่ ผู้ให้บริการเนื้อหา
- แอตทริบิวต์
-
android:authorities-
รายการของหน่วยงาน URI อย่างน้อย 1 รายการที่ระบุข้อมูลที่ผู้ให้บริการเนื้อหาเสนอ
ระบุหน่วยงานหลายแห่งโดยคั่นชื่อด้วยเครื่องหมายเซมิโคลอน
เพื่อหลีกเลี่ยงความขัดแย้ง ให้ใช้รูปแบบการตั้งชื่อแบบ Java สำหรับชื่อของหน่วยงาน
เช่น
com.example.provider.cartoonproviderโดยปกติจะเป็นชื่อ ของContentProviderคลาสย่อยที่ใช้ผู้ให้บริการไม่มีค่าเริ่มต้น ต้องระบุหน่วยงานอย่างน้อย 1 หน่วย
android:enabled- ระบบจะสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหาได้หรือไม่ โดยจะ
"true"หากทำได้ และ"false"หากทำไม่ได้ ค่าเริ่มต้น คือ"true"องค์ประกอบ
<application>มีแอตทริบิวต์enabledของตัวเองซึ่งใช้กับคอมโพเนนต์ของแอปพลิเคชันทั้งหมด รวมถึงผู้ให้บริการเนื้อหา แอตทริบิวต์<application>และ<provider>ต้องเป็น"true"ทั้งคู่ เนื่องจากทั้ง 2 แอตทริบิวต์ เป็นค่าเริ่มต้นเพื่อให้เปิดใช้ผู้ให้บริการเนื้อหาได้ หากเป็น"false"ระบบจะปิดใช้ผู้ให้บริการ ซึ่งจะสร้างอินสแตนซ์ไม่ได้ android:directBootAwareผู้ให้บริการเนื้อหาเป็นแบบตระหนักถึงการบูตโดยตรงหรือไม่ นั่นคือ สามารถเรียกใช้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ได้หรือไม่
หมายเหตุ: ในระหว่างการบูตโดยตรง ผู้ให้บริการเนื้อหาในแอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ในพื้นที่เก็บข้อมูลที่อุปกรณ์ป้องกัน
ค่าเริ่มต้นคือ
"false"android:exported-
ไม่ว่าผู้ให้บริการเนื้อหาจะพร้อมให้แอปพลิเคชันอื่นๆ ใช้งานหรือไม่
-
"true": ผู้ให้บริการพร้อมให้บริการแก่แอปพลิเคชันอื่นๆ แอปพลิเคชันใดก็ได้ ใช้ URI เนื้อหาของผู้ให้บริการเพื่อเข้าถึงได้ โดยขึ้นอยู่กับสิทธิ์ที่ระบุสำหรับ ผู้ให้บริการ -
"false": ผู้ให้บริการไม่พร้อมให้บริการแก่แอปพลิเคชันอื่นๆ ตั้งค่าandroid:exported="false"เพื่อจำกัดการเข้าถึงผู้ให้บริการสำหรับแอปพลิเคชัน ของคุณ เฉพาะแอปพลิเคชันที่มีรหัสผู้ใช้ (UID) เดียวกันกับผู้ให้บริการ หรือ แอปพลิเคชันที่ได้รับสิทธิ์เข้าถึงผู้ให้บริการชั่วคราวผ่านองค์ประกอบandroid:grantUriPermissionsเท่านั้นที่จะมีสิทธิ์เข้าถึง
เนื่องจากมีการเปิดตัวแอตทริบิวต์นี้ในระดับ API 17 อุปกรณ์ทั้งหมดที่ใช้ระดับ API 16 และต่ำกว่าจึงทำงานราวกับว่ามีการตั้งค่าแอตทริบิวต์นี้เป็น
"true"หากตั้งค่าandroid:targetSdkVersionเป็น 17 ขึ้นไป ค่าเริ่มต้นจะเป็น"false"สำหรับอุปกรณ์ที่ใช้ API ระดับ 17 ขึ้นไปคุณสามารถตั้งค่า
android:exported="false"และยังคงจำกัดการเข้าถึงผู้ให้บริการได้โดยตั้งค่าสิทธิ์ด้วยแอตทริบิวต์permission -
android:grantUriPermissions- ไม่ว่าผู้ที่ปกติไม่มีสิทธิ์เข้าถึงข้อมูลของผู้ให้บริการเนื้อหาจะได้รับสิทธิ์ให้ทำเช่นนั้นได้หรือไม่
เพื่อหลีกเลี่ยงข้อจำกัดที่กำหนดโดยแอตทริบิวต์
readPermissionwritePermissionpermissionและexportedชั่วคราวโดยจะเป็น
"true"หากให้สิทธิ์ได้ และ"false"หากให้สิทธิ์ไม่ได้ หาก"true"คุณจะให้สิทธิ์เข้าถึงข้อมูลของผู้ให้บริการเนื้อหารายใดก็ได้ หากค่าเป็น"false"จะให้สิทธิ์ได้เฉพาะชุดข้อมูลย่อยที่ระบุไว้ในองค์ประกอบย่อย<grant-uri-permission>เท่านั้น (หากมี) ค่าเริ่มต้นคือ"false"การให้สิทธิ์เป็นวิธีให้สิทธิ์เข้าถึงข้อมูลที่ได้รับการคุ้มครองโดยสิทธิ์แก่คอมโพเนนต์ของแอปพลิเคชันแบบครั้งเดียว เช่น เมื่อข้อความอีเมลมีไฟล์แนบ แอปพลิเคชันอีเมลอาจเรียกโปรแกรมดูที่เหมาะสมเพื่อเปิดไฟล์แนบ แม้ว่าโปรแกรมดูจะไม่มีสิทธิ์ทั่วไปในการดูข้อมูลทั้งหมดของผู้ให้บริการเนื้อหาก็ตาม
ในกรณีดังกล่าว สิทธิ์จะได้รับจาก
FLAG_GRANT_READ_URI_PERMISSIONและFLAG_GRANT_WRITE_URI_PERMISSIONในออบเจ็กต์Intentที่เปิดใช้งานคอมโพเนนต์ เช่น แอปพลิเคชันอีเมลอาจใส่FLAG_GRANT_READ_URI_PERMISSIONในIntentที่ส่งไปยังContext.startActivity()สิทธิ์นี้มีไว้สำหรับ URI ในIntentโดยเฉพาะหากเปิดใช้ฟีเจอร์นี้ ไม่ว่าจะโดยการตั้งค่าแอตทริบิวต์นี้เป็น
"true"หรือโดยการกำหนดองค์ประกอบย่อย<grant-uri-permission>ให้เรียกใช้Context.revokeUriPermission()เมื่อลบ URI ที่ครอบคลุมออกจากผู้ให้บริการโปรดดูองค์ประกอบ
<grant-uri-permission>ด้วย android:icon- ไอคอนที่แสดงถึงผู้ให้บริการเนื้อหา
แอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงไปยังทรัพยากรที่วาดได้ซึ่งมี
คำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุสำหรับแอปพลิเคชัน
โดยรวมแทน ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์
iconขององค์ประกอบ<application> android:initOrder- ลำดับการสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหา เมื่อเทียบกับผู้ให้บริการเนื้อหารายอื่นๆ ที่โฮสต์โดยกระบวนการเดียวกัน เมื่อผู้ให้บริการเนื้อหามีการพึ่งพาซึ่งกันและกัน การตั้งค่าแอตทริบิวต์นี้สำหรับผู้ให้บริการเนื้อหาแต่ละรายจะช่วยให้มั่นใจได้ว่าระบบจะสร้างผู้ให้บริการเนื้อหาตามลำดับที่การพึ่งพาเหล่านั้นกำหนด ค่านี้เป็นจำนวนเต็ม โดยระบบจะเริ่มต้นหมายเลขที่สูงกว่าก่อน
android:label- ป้ายกำกับที่ผู้ใช้อ่านได้สำหรับเนื้อหาที่ระบุ
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์
labelขององค์ประกอบ<application>โดยปกติแล้ว ป้ายกำกับจะตั้งค่าเป็นข้อมูลอ้างอิงไปยังทรัพยากรสตริง เพื่อให้ แปลเป็นภาษาท้องถิ่นได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ อย่างไรก็ตาม เพื่อความสะดวกในขณะที่คุณกำลังพัฒนาแอปพลิเคชัน คุณยังตั้งค่าเป็นสตริงดิบได้ด้วย
android:multiprocess- หากแอปทำงานในหลายกระบวนการ แอตทริบิวต์นี้จะกำหนดว่าจะสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหาหลายรายการหรือไม่ หาก
"true"กระบวนการของแอปแต่ละรายการจะมีออบเจ็กต์ Content Provider ของตัวเอง หาก"false"กระบวนการของแอปจะแชร์ออบเจ็กต์ ContentProvider เพียงรายการเดียว ค่าเริ่มต้นคือ"false"การตั้งค่าแฟล็กนี้เป็น
"true"จะช่วยปรับปรุงประสิทธิภาพได้โดยการลดค่าใช้จ่ายในการสื่อสารระหว่างโปรเซส แต่ก็เพิ่มหน่วยความจำที่ใช้ของแต่ละโปรเซสด้วย android:name- ชื่อของคลาสที่ใช้ Content Provider ซึ่งเป็นคลาสย่อยของ
ContentProviderโดยปกติแล้วจะเป็นชื่อคลาสแบบสมบูรณ์ เช่น"com.example.project.TransportationProvider"อย่างไรก็ตาม หากอักขระแรกของชื่อเป็นจุด ระบบจะต่อท้ายชื่อแพ็กเกจที่ระบุไว้ในองค์ประกอบ<manifest>ไม่มีค่าเริ่มต้น ต้องระบุชื่อ
android:permission- ชื่อสิทธิ์ที่ไคลเอ็นต์ต้องมีเพื่ออ่านหรือเขียนข้อมูลของ Content Provider
แอตทริบิวต์นี้เป็นวิธีที่สะดวกในการตั้งค่า
สิทธิ์เดียวสำหรับการอ่านและการเขียน อย่างไรก็ตาม แอตทริบิวต์
readPermissionwritePermissionและgrantUriPermissionsจะมีความสำคัญมากกว่าหากตั้งค่าแอตทริบิวต์
readPermissionด้วย ก็จะควบคุมการเข้าถึงสำหรับการค้นหาผู้ให้บริการเนื้อหา หากตั้งค่าแอตทริบิวต์writePermissionแอตทริบิวต์นี้จะควบคุมสิทธิ์เข้าถึงสำหรับการแก้ไขข้อมูลของผู้ให้บริการดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ส่วนสิทธิ์ในภาพรวมของไฟล์ Manifest ของแอปและเคล็ดลับด้านความปลอดภัย
android:process- ชื่อของกระบวนการที่ผู้ให้บริการเนื้อหาเรียกใช้ โดยปกติแล้ว
คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทํางานในกระบวนการเริ่มต้นที่สร้างขึ้นสําหรับ
แอปพลิเคชัน โดยมีชื่อเหมือนกับแพ็กเกจแอปพลิเคชัน
แอตทริบิวต์
processขององค์ประกอบ<application>สามารถตั้งค่า เริ่มต้นที่แตกต่างกันสำหรับคอมโพเนนต์ทั้งหมดได้ แต่คอมโพเนนต์แต่ละรายการจะลบล้างค่าเริ่มต้นได้ ด้วยแอตทริบิวต์processของตัวเอง ซึ่งช่วยให้คุณกระจาย แอปพลิเคชันไปยังหลายกระบวนการได้หากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยโคลอน (
:) ระบบจะสร้างกระบวนการใหม่ ซึ่งเป็นกระบวนการส่วนตัวของแอปพลิเคชันเมื่อจำเป็น และ กิจกรรมจะทำงานในกระบวนการนั้นหากชื่อกระบวนการขึ้นต้นด้วยอักขระตัวพิมพ์เล็ก กิจกรรมจะทำงานในกระบวนการส่วนกลางที่มีชื่อนั้น โดยมีเงื่อนไขว่ากิจกรรมนั้นมีสิทธิ์ทำเช่นนั้น ซึ่งจะช่วยให้คอมโพเนนต์ในแอปพลิเคชันต่างๆ แชร์กระบวนการได้ ซึ่งจะช่วยลดการใช้ทรัพยากร
android:readPermissionสิทธิ์ที่ไคลเอ็นต์ต้องมีเพื่อค้นหาผู้ให้บริการเนื้อหา
หากผู้ให้บริการตั้งค่า
android:grantUriPermissionsเป็น"true"หรือหากไคลเอ็นต์ที่ระบุมีคุณสมบัติตรงตามเงื่อนไขของ<grant-uri-permission>องค์ประกอบย่อย ไคลเอ็นต์จะได้รับสิทธิ์เข้าถึงแบบอ่านชั่วคราวสำหรับข้อมูลของผู้ให้บริการเนื้อหานอกจากนี้ โปรดดูแอตทริบิวต์
permissionและwritePermissionด้วยandroid:syncable- ไม่ว่าจะซิงค์ข้อมูลภายใต้การควบคุมของผู้ให้บริการเนื้อหากับข้อมูลในเซิร์ฟเวอร์ได้หรือไม่
"true"หากทำได้ และ"false"หากทำไม่ได้ android:writePermissionสิทธิ์ที่ไคลเอ็นต์ต้องใช้เพื่อทำการเปลี่ยนแปลงข้อมูล ที่ควบคุมโดยผู้ให้บริการเนื้อหา
หากผู้ให้บริการตั้งค่า
android:grantUriPermissionsเป็น"true"หรือหากไคลเอ็นต์ที่ระบุมีคุณสมบัติตรงตามเงื่อนไขของ<grant-uri-permission>องค์ประกอบย่อย ไคลเอ็นต์จะได้รับสิทธิ์เข้าถึงแบบเขียนชั่วคราวเพื่อแก้ไขข้อมูลของผู้ให้บริการเนื้อหานอกจากนี้ โปรดดูแอตทริบิวต์
permissionและreadPermissionด้วย
- เปิดตัวใน
- ระดับ API 1
- ดูเพิ่มเติม:
- ผู้ให้บริการเนื้อหา
<provider>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2026-07-01 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-07-01 UTC"],[],[]]