- ไวยากรณ์:
-
<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>- description:
-
ประกาศคอมโพเนนต์ผู้ให้บริการเนื้อหา ผู้ให้บริการเนื้อหาเป็นคลาสย่อยของ
ContentProviderที่ให้การเข้าถึงข้อมูลที่มีโครงสร้างที่จัดการโดย แอปพลิเคชัน ผู้ให้บริการเนื้อหาทั้งหมดในแอปพลิเคชันของคุณต้องได้รับการกำหนดไว้ใน องค์ประกอบ<provider>ในไฟล์ Manifest มิฉะนั้น ระบบจะไม่ทราบ ไม่ใช้อินเทอร์เน็ตประกาศเฉพาะผู้ให้บริการเนื้อหาที่เป็นส่วนหนึ่งของแอปพลิเคชันของคุณ อย่าประกาศผู้ให้บริการเนื้อหาใน กับแอปพลิเคชันอื่นๆ ที่คุณใช้ในแอปพลิเคชันของคุณ
ระบบ Android จัดเก็บการอ้างอิงไปยังผู้ให้บริการเนื้อหาตามหน่วยงาน ซึ่งเป็นส่วนหนึ่งของ URI เนื้อหาของผู้ให้บริการ ตัวอย่างเช่น สมมติว่าคุณต้องการ เข้าถึงผู้ให้บริการเนื้อหาที่เก็บข้อมูลเกี่ยวกับผู้เชี่ยวชาญด้านการดูแลสุขภาพ สิ่งต้องทำ คุณเรียกเมธอด
ContentResolver.query()ซึ่งใช้ URI ที่ระบุผู้ให้บริการและอาร์กิวเมนต์อื่นๆcontent://com.example.project.healthcareprovider/nurses/rn
รูปแบบ
content:ระบุ URI เป็น URI เนื้อหาที่ชี้ไปยัง ผู้ให้บริการเนื้อหา Android หน่วยงานcom.example.project.healthcareproviderระบุตัวตนผู้ให้บริการ ระบบ Android จะค้นหาสิทธิ์ในรายชื่อผู้ให้บริการที่รู้จักและหน่วยงานของผู้ให้บริการ สตริงย่อยnurses/rnคือเส้นทางที่ผู้ให้บริการเนื้อหาใช้ เพื่อระบุข้อมูลผู้ให้บริการชุดย่อยเมื่อคุณกำหนดผู้ให้บริการในองค์ประกอบ
<provider>คุณจะสามารถ ไม่รวมรูปแบบหรือเส้นทางในอาร์กิวเมนต์android:nameใส่เฉพาะ ที่เหมาะสมสำหรับข้อมูลเกี่ยวกับการใช้และพัฒนาผู้ให้บริการเนื้อหา โปรดดู ผู้ให้บริการเนื้อหา
- ดังนี้
-
android:authorities-
รายชื่อของหน่วยงาน URI อย่างน้อย 1 รายการที่ระบุข้อมูลที่ผู้ให้บริการเนื้อหามีให้
ระบุหน่วยงานหลายรายการโดยคั่นชื่อด้วยเครื่องหมายเซมิโคลอน
เพื่อหลีกเลี่ยงข้อขัดแย้ง ให้ใช้รูปแบบการตั้งชื่อแบบ Java สำหรับชื่อหน่วยงาน
เช่น
com.example.provider.cartoonproviderโดยปกติจะเป็นชื่อ ของคลาสย่อยContentProviderที่ใช้ผู้ให้บริการไม่มีค่าเริ่มต้น ต้องระบุหน่วยงานอย่างน้อยหนึ่งแห่ง
android:enabled- ระบบสร้างอินสแตนซ์ผู้ให้บริการเนื้อหาได้หรือไม่ ตอนนี้
"true"หากทำได้ และ"false"หากทำได้ ค่าเริ่มต้น มีค่า"true"องค์ประกอบ
<application>ของตัวเอง แอตทริบิวต์enabledที่ใช้กับแอตทริบิวต์ทั้งหมด คอมโพเนนต์ของแอปพลิเคชัน รวมถึงผู้ให้บริการเนื้อหา<application>และ<provider>แอตทริบิวต์ทั้งคู่ต้องเป็น"true"เพราะทั้งสอง ตามค่าเริ่มต้น เพื่อเปิดใช้ผู้ให้บริการเนื้อหา หากข้อใดข้อหนึ่งคือ"false"ปิดใช้ผู้ให้บริการอยู่ ไม่สามารถสร้างอินสแตนซ์ได้ android:directBootAwareผู้ให้บริการเนื้อหารับรู้การเปิดเครื่องโดยตรงหรือไม่ กล่าวคือ ว่าจะทำงานก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ได้หรือไม่
หมายเหตุ: ระหว่าง Direct Boot ซึ่งเป็นเนื้อหา ของผู้ให้บริการในแอปพลิเคชันของคุณ จะสามารถเข้าถึงเฉพาะข้อมูลที่เก็บไว้ใน พื้นที่เก็บข้อมูลที่ปกป้องอุปกรณ์
ค่าเริ่มต้นคือ
"false"android:exported-
ผู้ให้บริการเนื้อหามีให้ใช้แอปพลิเคชันอื่นหรือไม่
-
"true": ผู้ให้บริการพร้อมใช้งานสำหรับแอปพลิเคชันอื่น ทุกแอปพลิเคชันสามารถ ใช้ URI เนื้อหาของผู้ให้บริการเพื่อเข้าถึง URI ดังกล่าว โดยขึ้นอยู่กับสิทธิ์ที่ระบุไว้สำหรับ กับผู้ให้บริการ -
"false": ผู้ให้บริการไม่พร้อมใช้งานสำหรับแอปพลิเคชันอื่น ตั้งค่าandroid:exported="false"เพื่อจำกัดการเข้าถึงผู้ให้บริการสำหรับ แอปพลิเคชัน เฉพาะแอปพลิเคชันที่มีรหัสผู้ใช้ (UID) เดียวกันกับผู้ให้บริการ หรือ แอปพลิเคชันที่ได้รับสิทธิ์ชั่วคราว ผ่านทางandroid:grantUriPermissionsเข้าถึงได้
เนื่องจากแอตทริบิวต์นี้เริ่มใช้ใน API ระดับ 17 อุปกรณ์ทั้งหมดที่ใช้ระดับ API 16 และต่ำกว่าจะทํางานเสมือนว่าแอตทริบิวต์นี้ตั้งค่าไว้เป็น
"true"หากตั้งค่าไว้android:targetSdkVersionค่าเริ่มต้นคือ"false"สำหรับอุปกรณ์ที่ใช้ API ระดับ 17 ขึ้นไปคุณยังสามารถตั้งค่า
android:exported="false"และยังคงจำกัดการเข้าถึง โดยการตั้งค่าสิทธิ์ที่มี วันที่permission -
android:grantUriPermissions- ไม่ว่าจะเป็นบุคคลที่โดยปกติไม่มีสิทธิ์
การเข้าถึงข้อมูลของผู้ให้บริการเนื้อหา
สามารถให้สิทธิ์ดำเนินการดังกล่าวได้
เพื่อข้ามการจำกัดที่กำหนดโดย
readPermission,writePermission,permissionและ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- ไอคอนที่แสดงถึงผู้ให้บริการเนื้อหา
แอตทริบิวต์นี้ตั้งเป็นการอ้างอิงทรัพยากรที่ถอนออกได้ซึ่งมี
คำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ไอคอนที่ระบุไว้สำหรับแอปพลิเคชัน
จะใช้จำนวนเต็มแทน ดูข้อมูลเพิ่มเติมได้ที่
<application>แอตทริบิวต์iconขององค์ประกอบ android:initOrder- ลำดับการเริ่มต้นผู้ให้บริการเนื้อหา เมื่อเทียบกับผู้ให้บริการเนื้อหารายอื่นที่โฮสต์ด้วยกระบวนการเดียวกัน เมื่อมีทรัพยากร Dependency ระหว่างผู้ให้บริการเนื้อหา แอตทริบิวต์ของแต่ละชุด ให้แน่ใจว่าแอตทริบิวต์เหล่านั้นสร้างขึ้นตามลำดับ ที่จำเป็นสำหรับทรัพยากร Dependency เหล่านี้ ค่าเป็นจำนวนเต็ม โดยตัวเลขที่สูงกว่าจะถูกเริ่มต้นก่อน
android:label- ป้ายกำกับที่ผู้ใช้อ่านได้สำหรับเนื้อหาที่ให้ไว้
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมจะเป็น
ใช้แทน ดูข้อมูลเพิ่มเติมได้ที่องค์ประกอบ
<application>labelโดยปกติ ป้ายกำกับจะถูกตั้งค่าเป็นการอ้างอิงไปยังทรัพยากรสตริง ดังนั้น สามารถแปลได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ แต่เพื่อความสะดวก ในระหว่างที่คุณพัฒนาแอปพลิเคชัน ยังสามารถตั้งค่าเป็นสตริงดิบได้
android:multiprocess- หากแอปทำงานในหลายกระบวนการ แอตทริบิวต์นี้จะระบุว่า
อินสแตนซ์ของผู้ให้บริการเนื้อหาหลายอินสแตนซ์จะถูกสร้าง หากเป็น
"true"กระบวนการของแอปแต่ละรายการจะมีออบเจ็กต์ผู้ให้บริการเนื้อหาของตัวเอง ถ้า"false"กระบวนการของแอปจะแชร์ออบเจ็กต์ผู้ให้บริการเนื้อหาเพียง 1 รายการเท่านั้น ค่าเริ่มต้นคือ"false"การตั้งค่าแฟล็กนี้เป็น
"true"จะช่วยปรับปรุงประสิทธิภาพโดยลด ค่าใช้จ่ายของการสื่อสารระหว่างโปรเซส แต่จะช่วยเพิ่มหน่วยความจำ ของแต่ละกระบวนการ android:name- ชื่อคลาสที่ใช้งานผู้ให้บริการเนื้อหา คลาสย่อยของ
ContentProviderซึ่งมักจะเป็น ชื่อชั้นเรียน เช่น"com.example.project.TransportationProvider"แต่ถ้าอักขระตัวแรกของชื่อเป็นเครื่องหมายจุด จะเพิ่มค่าต่อท้ายชื่อแพ็กเกจที่ระบุไว้ใน องค์ประกอบ<manifest>ไม่มีค่าเริ่มต้น ต้องระบุชื่อ
android:permission- ชื่อของสิทธิ์ที่ลูกค้าต้องอ่านหรือเขียน
ข้อมูลของผู้ให้บริการเนื้อหา แอตทริบิวต์นี้เป็นวิธีที่สะดวกในการตั้งค่า
สิทธิ์เดียวสำหรับทั้งการอ่านและการเขียน อย่างไรก็ตาม
readPermission, แอตทริบิวต์writePermissionและgrantUriPermissionsจะมีลำดับความสำคัญเหนือกว่า มากกว่าอันนี้หาก
readPermissionมีการตั้งค่าเช่นกัน ซึ่งจะควบคุมการเข้าถึงในการค้นหาผู้ให้บริการเนื้อหา หากมีการตั้งค่าแอตทริบิวต์writePermissionซึ่งควบคุมสิทธิ์เข้าถึงเพื่อแก้ไขข้อมูลของผู้ให้บริการดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ สิทธิ์ ในภาพรวมไฟล์ Manifest ของแอปและ เคล็ดลับความปลอดภัย
android:process- ชื่อของกระบวนการที่ผู้ให้บริการเนื้อหาเรียกใช้ โดยทั่วไป
คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทำงานในกระบวนการเริ่มต้นที่สร้างขึ้นสำหรับ
แอปพลิเคชัน มีชื่อเดียวกับแพ็กเกจแอปพลิเคชัน
ขององค์ประกอบ
<application>วันที่processสามารถตั้งค่าแอตทริบิวต์ ค่าเริ่มต้นสำหรับทุกคอมโพเนนต์ แต่คอมโพเนนต์แต่ละอย่างสามารถแทนที่ค่าเริ่มต้น ด้วยแอตทริบิวต์processของตัวเองเพื่อ ช่วยให้คุณกระจายข้อมูล การใช้งานในหลายกระบวนการหากชื่อที่กำหนดให้กับแอตทริบิวต์นี้เริ่มต้นด้วยโคลอน (
:) ซึ่งเป็นแบบส่วนตัวสำหรับแอปพลิเคชัน จะสร้างขึ้นเมื่อจำเป็น และ กิจกรรมจะทำงานในกระบวนการนั้นหากชื่อกระบวนการเริ่มต้นด้วยอักขระตัวพิมพ์เล็ก กิจกรรมจะทำงาน ในกระบวนการส่วนกลางของชื่อนั้น หากชื่อนั้นได้รับอนุญาตให้ดำเนินการดังกล่าว ทำให้คอมโพเนนต์ต่างๆ ในแอปพลิเคชันต่างๆ สามารถแบ่งปันกระบวนการได้โดย การใช้ทรัพยากร
android:readPermissionสิทธิ์ที่ลูกค้าต้องใช้เพื่อค้นหาผู้ให้บริการเนื้อหา
ในกรณีที่ผู้ให้บริการตั้งค่า
android:grantUriPermissionsเป็น"true"หรือหากไคลเอ็นต์ที่ระบุตรงกับเงื่อนไขของ<grant-uri-permission>ไคลเอ็นต์จะได้รับสิทธิ์การอ่านเนื้อหาชั่วคราว ข้อมูลของผู้ให้บริการรวมถึงดู
permissionและwritePermissionandroid:syncable- ข้อมูลที่อยู่ในการควบคุมของผู้ให้บริการเนื้อหาหรือไม่
สามารถซิงค์กับข้อมูลบนเซิร์ฟเวอร์ได้ เป็น
"true"หากทำได้ และ"false"หากทำได้ android:writePermissionสิทธิ์ที่ลูกค้าต้องทำการเปลี่ยนแปลงข้อมูล ควบคุมโดยผู้ให้บริการเนื้อหา
ในกรณีที่ผู้ให้บริการตั้งค่า
android:grantUriPermissionsเป็น"true"หรือหากไคลเอ็นต์ที่ระบุตรงกับเงื่อนไขของ<grant-uri-permission>ไคลเอ็นต์จะได้รับสิทธิ์การเขียนชั่วคราวเพื่อแก้ไขเนื้อหา ข้อมูลของผู้ให้บริการรวมถึงดู
permissionและreadPermission
- เปิดตัวใน
- API ระดับ 1
- ดูเพิ่มเติม
- ผู้ให้บริการเนื้อหา
<provider>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2025-07-27 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"]],["อัปเดตล่าสุด 2025-07-27 UTC"],[],[]]