<provider>

ไวยากรณ์:
<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 และ writePermission

android:syncable
ข้อมูลที่อยู่ในการควบคุมของผู้ให้บริการเนื้อหาหรือไม่ สามารถซิงค์กับข้อมูลบนเซิร์ฟเวอร์ได้ เป็น "true" หากทำได้ และ"false"หากทำได้
android:writePermission

สิทธิ์ที่ลูกค้าต้องทำการเปลี่ยนแปลงข้อมูล ควบคุมโดยผู้ให้บริการเนื้อหา

ในกรณีที่ผู้ให้บริการตั้งค่า android:grantUriPermissions เป็น "true" หรือหากไคลเอ็นต์ที่ระบุตรงกับเงื่อนไขของ <grant-uri-permission> ไคลเอ็นต์จะได้รับสิทธิ์การเขียนชั่วคราวเพื่อแก้ไขเนื้อหา ข้อมูลของผู้ให้บริการ

รวมถึงดู permission และ readPermission

เปิดตัวใน
API ระดับ 1
ดูเพิ่มเติม
ผู้ให้บริการเนื้อหา