<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>
description:
ประกาศบริการ ซึ่งเป็นคลาสย่อย Service เป็นหนึ่งในคอมโพเนนต์ของแอปพลิเคชัน บริการไม่มีอินเทอร์เฟซผู้ใช้ที่เป็นภาพ ซึ่งแตกต่างจากกิจกรรม ซึ่งจะใช้เพื่อดําเนินการแบบทำงานอยู่เบื้องหลังเป็นเวลานานหรือ API การสื่อสารแบบริชมีเดียที่แอปพลิเคชันอื่นๆ สามารถเรียกใช้ได้

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

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

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

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

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

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

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

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

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

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

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

android:foregroundServiceType

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

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

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

ไอคอนของบริการไม่ว่าจะตั้งค่าที่นี่หรือโดยองค์ประกอบ <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 ไปยังบริการ

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

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

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

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

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

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