- ไวยากรณ์:
-
<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:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"] 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ที่ให้การเข้าถึงข้อมูลที่มีโครงสร้างซึ่ง แอปพลิเคชันจัดการ ผู้ให้บริการเนื้อหาทั้งหมดในแอปพลิเคชันต้องกำหนดไว้ใน<provider>ในไฟล์ Manifest มิฉะนั้นระบบจะไม่รู้จักผู้ให้บริการเนื้อหาและจะไม่เรียกใช้ประกาศเฉพาะผู้ให้บริการเนื้อหาที่เป็นส่วนหนึ่งของแอปพลิเคชัน อย่าประกาศผู้ให้บริการเนื้อหาใน แอปพลิเคชันอื่นๆ ที่คุณใช้ในแอปพลิเคชันของคุณ
ระบบ Android จะจัดเก็บข้อมูลอ้างอิงถึงผู้ให้บริการเนื้อหาตามสตริง Authority ซึ่งเป็นส่วนหนึ่งของ Content URI ของผู้ให้บริการ ตัวอย่างเช่น สมมติว่าคุณต้องการเข้าถึงผู้ให้บริการเนื้อหาที่จัดเก็บข้อมูลเกี่ยวกับผู้เชี่ยวชาญด้านการดูแลสุขภาพ หากต้องการทำ เช่นนี้ ให้เรียกใช้เมธอด
ContentResolver.query()ซึ่งใช้ URI ที่ระบุผู้ให้บริการในอาร์กิวเมนต์อื่นๆ ดังนี้content://com.example.project.healthcareprovider/nurses/rn
content:_สคีม_ ระบุ URI เป็น Content URI ที่ชี้ไปยัง ผู้ให้บริการเนื้อหาของ Android Authoritycom.example.project.healthcareproviderระบุตัวผู้ให้บริการเอง ระบบ Android จะค้นหา Authority ในรายการผู้ให้บริการที่รู้จักและ Authority ของผู้ให้บริการเหล่านั้น สตริงย่อยnurses/rnคือ เส้นทาง ซึ่งผู้ให้บริการเนื้อหาใช้ เพื่อระบุชุดย่อยของข้อมูลผู้ให้บริการเมื่อกำหนดผู้ให้บริการในองค์ประกอบ
<provider>คุณ จะไม่ใส่สคีมหรือเส้นทางในอาร์กิวเมนต์android:nameแต่จะใส่เฉพาะ Authorityดูข้อมูลเกี่ยวกับการใช้และการพัฒนาผู้ให้บริการเนื้อหาได้ที่ ผู้ให้บริการเนื้อหา
- แอตทริบิวต์:
-
android:authorities-
รายการ Authority ของ URI อย่างน้อย 1 รายการที่ระบุข้อมูลที่ผู้ให้บริการเนื้อหาเสนอ
ระบุ Authority หลายรายการโดยคั่นชื่อด้วยอัฒภาค
ใช้แบบแผนการตั้งชื่อสไตล์ Java สำหรับชื่อ Authority
เช่น
com.example.provider.cartoonproviderเพื่อหลีกเลี่ยงความขัดแย้ง โดยปกติจะเป็นชื่อ ของคลาสย่อยContentProviderที่ใช้ผู้ให้บริการไม่มีค่าเริ่มต้น ต้องระบุ Authority อย่างน้อย 1 รายการ
android:enabled- ระบุว่าระบบสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหาได้หรือไม่ ค่าจะเป็น
"true"หากสร้างได้ และ"false"หากสร้างไม่ได้ ค่าเริ่มต้น คือ"true"องค์ประกอบ
<application>มีแอตทริบิวต์enabledของตัวเองซึ่งใช้กับคอมโพเนนต์แอปพลิเคชันทั้งหมด รวมถึงผู้ให้บริการเนื้อหา แอตทริบิวต์<application>และ<provider>ต้องมีค่าเป็น"true"ทั้งคู่ (ซึ่ง เป็นค่าเริ่มต้น) ผู้ให้บริการเนื้อหาจึงจะเปิดใช้ได้ หากแอตทริบิวต์ใดมีค่าเป็น"false"ผู้ให้บริการจะถูกปิดใช้ และจะสร้างอินสแตนซ์ไม่ได้ android:directBootAwareระบุว่าผู้ให้บริการเนื้อหา รองรับการบูตโดยตรงหรือไม่ นั่นคือ ระบุว่าผู้ให้บริการเนื้อหาจะทำงานได้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์หรือไม่
หมายเหตุ: ระหว่าง การบูตโดยตรง ผู้ให้บริการเนื้อหาในแอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ใน พื้นที่เก็บข้อมูล ที่ได้รับการปกป้องด้วยอุปกรณ์
ค่าเริ่มต้นคือ
"false"android:exported-
ระบุว่าแอปพลิเคชันอื่นๆ สามารถใช้ผู้ให้บริการเนื้อหาได้หรือไม่
-
"true": ผู้ให้บริการพร้อมให้แอปพลิเคชันอื่นๆ ใช้ แอปพลิเคชันใดก็ได้สามารถ ใช้ Content URI ของผู้ให้บริการเพื่อเข้าถึงผู้ให้บริการได้ โดยขึ้นอยู่กับสิทธิ์ที่ระบุไว้สำหรับ ผู้ให้บริการ -
"false": ผู้ให้บริการไม่พร้อมให้แอปพลิเคชันอื่นๆ ใช้ ตั้งค่าandroid:exported="false"เพื่อจำกัดการเข้าถึงผู้ให้บริการไว้เฉพาะ แอปพลิเคชันของคุณ เฉพาะแอปพลิเคชันที่มี User ID (UID) เดียวกับผู้ให้บริการ หรือ แอปพลิเคชันที่ได้รับสิทธิ์เข้าถึงผู้ให้บริการชั่วคราวผ่านandroid:grantUriPermissionsเท่านั้นที่จะเข้าถึงผู้ให้บริการได้
เนื่องจากแอตทริบิวต์นี้เปิดตัวใน API ระดับ 17 อุปกรณ์ทั้งหมดที่ใช้ API ระดับ 16 ลงไปจึงทำงานราวกับว่าแอตทริบิวต์นี้ตั้งค่าเป็น
"true"หากคุณตั้งค่าandroid:targetSdkVersionเป็น 17 ขึ้นไป ค่าเริ่มต้นจะเป็น"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- ไอคอนที่แสดงถึงผู้ให้บริการเนื้อหา
แอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงถึงทรัพยากร Drawable ที่มีคำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุไว้สำหรับแอปพลิเคชันทั้งหมดแทน ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์
iconขององค์ประกอบ<application> android:initOrder- ลำดับการสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหาเมื่อเทียบกับผู้ให้บริการเนื้อหาอื่นๆ ที่โฮสต์โดยกระบวนการเดียวกัน เมื่อผู้ให้บริการเนื้อหามีการพึ่งพาซึ่งกันและกัน การตั้งค่าแอตทริบิวต์นี้สำหรับผู้ให้บริการเนื้อหาแต่ละรายจะช่วยให้มั่นใจได้ว่าระบบจะสร้างผู้ให้บริการเนื้อหาตามลำดับที่การพึ่งพาเหล่านั้นกำหนด ค่าจะเป็นจำนวนเต็ม โดยระบบจะเริ่มต้นค่าที่สูงกว่าก่อน
android:intentMatchingFlags-
ใช้แอตทริบิวต์นี้เพื่อปรับแต่งวิธีที่ระบบจับคู่ Intent ขาเข้าไปยังคอมโพเนนต์แอป โดยค่าเริ่มต้น ระบบจะไม่มีการใช้กฎการจับคู่พิเศษ
ค่าที่ตั้งไว้ในแท็ก
<provider>จะลบล้างค่าที่ตั้งไว้ในแท็ก<application>ค่าต้องเป็นแฟล็กอย่างน้อย 1 รายการต่อไปนี้ โดยคั่นด้วย "
|"แฟล็ก คำอธิบาย noneปิดใช้กฎการจับคู่พิเศษทั้งหมดสำหรับ Intent ขาเข้า เมื่อ ระบุแฟล็กหลายรายการ ระบบจะแก้ไขค่าที่ขัดแย้งกันโดยให้ความสำคัญกับแฟล็ก noneenforceIntentFilterบังคับใช้การจับคู่ที่เข้มงวดขึ้นสำหรับ Intent ขาเข้า
- Intent ที่ชัดเจนต้องตรงกับ Intent Filter ของคอมโพเนนต์เป้าหมาย
- Intent ที่ไม่มีการดำเนินการจะไม่ตรงกับ Intent Filter ใดๆ
allowNullActionผ่อนปรนกฎการจับคู่เพื่อให้ Intent ที่ไม่มีการดำเนินการตรงกันได้ แฟล็กนี้ใช้ร่วมกับ
enforceIntentFilterเพื่อให้ได้ลักษณะการทำงานต่อไปนี้- Intent ที่ชัดเจนต้องตรงกับ Intent Filter ของคอมโพเนนต์เป้าหมาย
- Intent ที่ไม่มีการดำเนินการจะตรงกับ Intent Filter ใดก็ได้
ดูข้อมูลเพิ่มเติมได้ที่ส่วน Safer Intents ในการเปลี่ยนแปลงลักษณะการทำงานของ Android 16 (API ระดับ 36)
android:label- ป้ายกำกับที่ผู้ใช้สามารถอ่านได้สำหรับเนื้อหาที่ให้ไว้
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันทั้งหมดแทน ดูข้อมูลเพิ่มเติมได้ที่แอตทริบิวต์
ขององค์ประกอบ
<application>labelโดยปกติแล้วป้ายกำกับจะตั้งค่าเป็นการอ้างอิงถึงทรัพยากรสตริงเพื่อให้แปลเป็นภาษาต่างๆ ได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ อย่างไรก็ตาม คุณยังตั้งค่าป้ายกำกับเป็นสตริงดิบได้ด้วยเพื่อความสะดวกขณะพัฒนาแอปพลิเคชัน
android:multiprocess- หากแอปทำงานในหลายกระบวนการ แอตทริบิวต์นี้จะกำหนดว่าระบบจะสร้างอินสแตนซ์ของผู้ให้บริการเนื้อหาหลายรายการหรือไม่ หากเป็น
"true"กระบวนการแต่ละอย่างของแอปจะมีออบเจ็กต์ผู้ให้บริการเนื้อหาของตัวเอง หากเป็น"false"กระบวนการของแอปจะแชร์ออบเจ็กต์ผู้ให้บริการเนื้อหาเพียงรายการเดียว ค่าเริ่มต้นคือ"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
- ดูเพิ่มเติม:
- ผู้ให้บริการเนื้อหา
<provider>
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2026-07-03 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-03 UTC"],[],[]]