<service>

ไวยากรณ์:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
รวมอยู่ใน:
<application>
สามารถมีองค์ประกอบต่อไปนี้
<intent-filter>
<meta-data>
<property>
คำอธิบาย:
ประกาศบริการ ซึ่งเป็นคลาสย่อยของ Service ให้เป็นหนึ่งในคอมโพเนนต์ของแอปพลิเคชัน บริการไม่มีอินเทอร์เฟซผู้ใช้แบบภาพเหมือนกับกิจกรรม โดยใช้เพื่อดำเนินการเบื้องหลังที่ใช้เวลานานหรือ API การสื่อสารที่สมบูรณ์ซึ่งแอปพลิเคชันอื่นๆ สามารถเรียกใช้ได้

บริการทั้งหมดต้องแสดงด้วยองค์ประกอบ <service> ใน ไฟล์ Manifest หากไม่ได้ประกาศไว้ในไฟล์ดังกล่าว ระบบจะไม่เห็นและบริการจะไม่ทำงาน

หมายเหตุ: ใน Android 8.0 (API ระดับ 26) ขึ้นไป ระบบจะจำกัด สิ่งที่แอปทำได้ขณะทำงานในเบื้องหลัง ดูข้อมูลเพิ่มเติมได้ที่คำแนะนำที่กล่าวถึงข้อจำกัดการทำงานในเบื้องหลังและข้อจำกัดตำแหน่งในเบื้องหลัง

แอตทริบิวต์:
android:description
สตริงที่ผู้ใช้สามารถอ่านได้ซึ่งอธิบายบริการ คำอธิบายจะตั้งค่าเป็นการ อ้างอิงทรัพยากรสตริงเพื่อให้แปลเป็นภาษาต่างๆ ได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้
android:directBootAware

ระบุว่าบริการ รองรับการบูตโดยตรง หรือไม่ นั่นคือ สามารถทำงานได้ก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์หรือไม่

หมายเหตุ: ระหว่าง การบูตโดยตรง บริการใน แอปพลิเคชันจะเข้าถึงได้เฉพาะข้อมูลที่จัดเก็บไว้ใน พื้นที่เก็บข้อมูลที่ป้องกันด้วยอุปกรณ์

ค่าเริ่มต้นคือ "false"

android:enabled
ระบุว่าระบบสร้างอินสแตนซ์ของบริการได้หรือไม่ ค่าจะเป็น "true" หากสร้างได้ และ "false" หากสร้างไม่ได้ ค่าเริ่มต้นคือ "true"

องค์ประกอบ <application> มีแอตทริบิวต์ enabled ของตัวเองซึ่งใช้กับคอมโพเนนต์ทั้งหมดของแอปพลิเคชัน รวมถึงบริการ แอตทริบิวต์ <application> และ <service> ต้องเป็น "true" ทั้งคู่ (ซึ่ง เป็นค่าเริ่มต้น) บริการจึงจะเปิดใช้ได้ หากแอตทริบิวต์ใดแอตทริบิวต์หนึ่งเป็น "false" บริการจะถูกปิดใช้และสร้างอินสแตนซ์ไม่ได้

android:exported
ระบุว่าคอมโพเนนต์ของแอปพลิเคชันอื่นๆ สามารถเรียกใช้บริการหรือโต้ตอบกับบริการได้หรือไม่ ค่าจะเป็น "true" หากทำได้ และ "false" หากทำไม่ได้ เมื่อค่าเป็น "false" เฉพาะคอมโพเนนต์ของแอปพลิเคชันเดียวกันหรือแอปพลิเคชันที่มีรหัสผู้ใช้เดียวกันเท่านั้นที่จะเริ่มบริการหรือผูกกับบริการได้

ค่าเริ่มต้นจะขึ้นอยู่กับว่าบริการมีตัวกรอง Intent หรือไม่ หากไม่มีตัวกรองใดๆ หมายความว่าบริการจะเรียกใช้ได้โดยการระบุชื่อคลาสที่แน่นอนเท่านั้น ซึ่งหมายความว่าบริการมีไว้ใช้ภายในแอปพลิเคชันเท่านั้น เนื่องจากแอปพลิเคชันอื่นๆ ไม่ทราบชื่อคลาส ดังนั้นในกรณีนี้ ค่าเริ่มต้นจะเป็น "false" ในทางกลับกัน หากมีตัวกรองอย่างน้อย 1 รายการ หมายความว่าบริการมีไว้ใช้ภายนอก ดังนั้นค่าเริ่มต้นจะเป็น "true"

แอตทริบิวต์นี้ไม่ใช่วิธีเดียวในการจำกัดการแสดงบริการต่อแอปพลิเคชันอื่นๆ คุณยังใช้สิทธิ์เพื่อจำกัดเอนทิตีภายนอกที่โต้ตอบกับบริการได้ด้วย ดูแอตทริบิวต์ permission

android:foregroundServiceType

ระบุว่าบริการเป็นบริการที่ทำงานอยู่เบื้องหน้าซึ่งตรงตาม Use Case ที่เฉพาะเจาะจง ตัวอย่างเช่น ประเภทบริการที่ทำงานอยู่เบื้องหน้า "location" บ่งบอกว่าแอปกำลังรับตำแหน่งปัจจุบันของอุปกรณ์ ซึ่งโดยปกติแล้วจะเป็นการดำเนินการต่อจากการดำเนินการที่ผู้ใช้เริ่มต้นขึ้นซึ่งเกี่ยวข้องกับตำแหน่งของอุปกรณ์

คุณสามารถกำหนดประเภทบริการที่ทำงานอยู่เบื้องหน้าหลายประเภทให้กับบริการที่เฉพาะเจาะจงได้

android:icon
ไอคอนที่แสดงบริการ แอตทริบิวต์นี้ตั้งค่าเป็นการอ้างอิงทรัพยากร Drawable ที่มีคำจำกัดความของรูปภาพ หากไม่ได้ตั้งค่าไว้ ระบบจะใช้ไอคอนที่ระบุไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์ขององค์ประกอบ <application> icon

ไอคอนของบริการ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือโดยองค์ประกอบ <application> จะเป็นไอคอน เริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของบริการด้วย ดูแอตทริบิวต์ icon ขององค์ประกอบ <intent-filter>

android:isolatedProcess
หากตั้งค่าเป็น "true" บริการนี้จะทำงานภายใต้กระบวนการพิเศษที่แยกจาก ระบบอื่นๆ และไม่มีสิทธิ์ของตัวเอง การสื่อสารกับบริการนี้จะทำได้ผ่าน Service API เท่านั้น โดยใช้ การผูกและการเริ่มต้น
android:label
ชื่อที่ผู้ใช้สามารถอ่านได้สำหรับบริการ หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ระบบจะใช้ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมแทน ดูแอตทริบิวต์ label ขององค์ประกอบ <application>

ป้ายกำกับของบริการ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือโดยองค์ประกอบ <application> จะเป็นป้ายกำกับ เริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของบริการด้วย ดูแอตทริบิวต์ label ขององค์ประกอบ <intent-filter>

ป้ายกำกับจะตั้งค่าเป็นการอ้างอิงทรัพยากรสตริงเพื่อให้แปลเป็นภาษาต่างๆ ได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ อย่างไรก็ตาม คุณยังตั้งค่าเป็นสตริงดิบได้ด้วยเพื่อความสะดวกขณะพัฒนาแอปพลิเคชัน

android:name
ชื่อของคลาสย่อย Service ที่ใช้บริการ ซึ่งเป็นชื่อคลาสที่มีคุณสมบัติครบถ้วน เช่น "com.example.project.RoomService" อย่างไรก็ตาม หาก อักขระแรกของชื่อเป็นจุด เช่น ".RoomService" ระบบจะต่อท้ายชื่อแพ็กเกจที่ระบุไว้ในองค์ประกอบ <manifest>

เมื่อเผยแพร่แอปพลิเคชันแล้ว อย่า เปลี่ยนชื่อนี้ เว้นแต่คุณจะตั้งค่า android:exported="false"

ไม่มีค่าเริ่มต้น คุณต้องระบุชื่อ

android:permission
ชื่อของสิทธิ์ที่เอนทิตีต้องมีจึงจะเปิดใช้บริการหรือผูกกับบริการได้ หากผู้เรียกใช้ startService(), bindService() หรือ stopService() ไม่ได้รับสิทธิ์นี้ เมธอดจะไม่ทำงานและระบบจะไม่ส่งออบเจ็กต์ Intent ไปยังบริการ

หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ กลุ่มสิทธิ์ที่ตั้งค่าโดย <application> แอตทริบิวต์ permission ขององค์ประกอบจะใช้กับบริการ หากไม่ได้ตั้งค่าแอตทริบิวต์ใดแอตทริบิวต์หนึ่ง บริการจะไม่ได้รับการปกป้องด้วยสิทธิ์

ดูข้อมูลเพิ่มเติมเกี่ยวกับสิทธิ์ได้ที่ ส่วนสิทธิ์ ในภาพรวมของไฟล์ Manifest ของแอปและ หลักเกณฑ์ด้านความปลอดภัย

android:process
ชื่อของกระบวนการที่บริการทำงาน โดยปกติแล้ว คอมโพเนนต์ทั้งหมดของแอปพลิเคชันจะทำงานในกระบวนการเริ่มต้นที่สร้างขึ้นสำหรับแอปพลิเคชัน ซึ่งมีชื่อเดียวกับแพ็กเกจของแอปพลิเคชัน แอตทริบิวต์ ขององค์ประกอบ <application> process สามารถตั้งค่า เริ่มต้นที่แตกต่างกันสำหรับคอมโพเนนต์ทั้งหมดได้ แต่คอมโพเนนต์สามารถลบล้างค่าเริ่มต้นด้วยแอตทริบิวต์ process ของตัวเอง ซึ่งช่วยให้คุณกระจายแอปพลิเคชันไปยังกระบวนการต่างๆ ได้

หากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยโคลอน (:) ระบบจะสร้างกระบวนการใหม่ที่เป็นส่วนตัวสำหรับแอปพลิเคชันเมื่อจำเป็น และบริการจะทำงานในกระบวนการนั้น

หากชื่อกระบวนการขึ้นต้นด้วยอักขระตัวพิมพ์เล็ก บริการจะทำงานในกระบวนการส่วนกลางที่มีชื่อนั้น โดยมีเงื่อนไขว่าบริการมีสิทธิ์ทำเช่นนั้น ซึ่งจะช่วยให้คอมโพเนนต์ในแอปพลิเคชันต่างๆ แชร์กระบวนการเดียวกันได้ จึงช่วยลดการใช้ทรัพยากร

android:stopWithTask
หากตั้งค่าเป็น "true" ระบบจะหยุดบริการโดยอัตโนมัติเมื่อผู้ใช้นำงานที่เริ่มต้นจากกิจกรรมที่แอปเป็นเจ้าของออก ค่าเริ่มต้นคือ "false"
ดูเพิ่มเติม:
<application>
<activity>
เปิดตัวใน:
ระดับ API 1