- ไวยากรณ์:
<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" > ... </service>
- ที่อยู่ใน:
<application>
- สามารถมีข้อมูลต่อไปนี้
<intent-filter>
<meta-data>
- description:
- ประกาศบริการ คลาสย่อย
Service
เป็นคลาสเดียว คอมโพเนนต์ของแอปพลิเคชัน สิ่งที่ต่างจากกิจกรรมคือ บริการไม่มี อินเทอร์เฟซผู้ใช้แบบภาพ แอปเหล่านี้ใช้สำหรับสร้างพื้นหลังที่ใช้เวลานาน หรือ API การสื่อสารที่สมบูรณ์ที่ผู้อื่นสามารถเรียกใช้ได้ แอปพลิเคชันบริการทั้งหมดต้องแสดงด้วยองค์ประกอบ
<service>
ใน ไฟล์ Manifest รายการใดๆ ที่ไม่ได้ประกาศไว้ว่าไม่มี ด้วยระบบและไม่เคยเรียกใช้หมายเหตุ: ใน Android 8.0 (API ระดับ 26) ขึ้นไป ระบบจะจำกัด สิ่งที่แอปของคุณทำได้ ขณะที่แอปทำงานในพื้นหลัง สำหรับ โปรดดูข้อมูลเพิ่มเติมจากคำแนะนำที่พูดถึง ขีดจำกัดการดำเนินการในเบื้องหลังและ ตำแหน่งในเบื้องหลัง ขีดจำกัด
- ดังนี้
android:description
- สตริงที่ผู้ใช้อ่านได้ซึ่งอธิบายถึงบริการ คำอธิบายได้รับการตั้งค่าเป็น การอ้างอิงไปยังทรัพยากรสตริง เพื่อให้แปลได้เช่นเดียวกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้
android:directBootAware
บริการเป็นแบบรับรู้การเปิดเครื่องโดยตรงหรือไม่ กล่าวคือ ว่าจะทำงานก่อนที่ผู้ใช้จะปลดล็อกอุปกรณ์ได้หรือไม่
หมายเหตุ: ระหว่าง Direct Boot ซึ่งเป็นบริการใน แอปพลิเคชันของคุณจะสามารถเข้าถึงเฉพาะข้อมูลที่เก็บไว้ใน พื้นที่เก็บข้อมูลที่ปกป้องอุปกรณ์
ค่าเริ่มต้นคือ
"false"
android:enabled
- บริการสร้างขึ้นโดยระบบได้หรือไม่ ตอนนี้
"true"
หากทำได้ และ"false"
หากทำได้ ค่าเริ่มต้น มีค่า"true"
องค์ประกอบ
<application>
ของตัวเอง แอตทริบิวต์enabled
ที่ใช้กับแอตทริบิวต์ทั้งหมด คอมโพเนนต์ของแอปพลิเคชัน รวมถึงบริการ<application>
และ<service>
แอตทริบิวต์ต้องเป็น"true"
ทั้งคู่ โดยค่าเริ่มต้น เพื่อเปิดใช้บริการ หากข้อใดข้อหนึ่งคือ"false"
ระบบได้ปิดใช้บริการนี้และสร้างอินสแตนซ์ไม่ได้ android:exported
- กำหนดว่าคอมโพเนนต์ของแอปพลิเคชันอื่นจะเรียกใช้ได้หรือไม่
บริการหรือโต้ตอบกับบริการ ราคา
"true"
หากทำได้ และ"false"
หากไม่ เมื่อค่าเป็น"false"
จะมีเพียง คอมโพเนนต์ของแอปพลิเคชันหรือแอปพลิเคชันเดียวกัน ที่มีรหัสผู้ใช้เดียวกันสามารถเริ่มใช้บริการหรือเชื่อมโยงกับบริการได้ค่าเริ่มต้นขึ้นอยู่กับว่าบริการมีตัวกรอง Intent หรือไม่ ไม่มีตัวกรองใดๆ หมายความว่าระบบจะเรียกใช้ได้โดยการระบุ ชื่อคลาสที่ตรงกันทุกประการ ซึ่งหมายความว่าบริการนี้มีไว้สำหรับ การใช้งานภายในแอปพลิเคชัน เนื่องจากผู้อื่นไม่ทราบชื่อชั้นเรียน ดังนั้นใน ในกรณีนี้ ค่าเริ่มต้นคือ
"false"
ในขณะที่ การมีตัวกรองอย่างน้อยหนึ่งรายการ แสดงว่าบริการ มีไว้สำหรับใช้ภายนอก ดังนั้นค่าเริ่มต้นจะเป็น"true"
แอตทริบิวต์นี้ไม่ใช่วิธีเดียวที่จะจำกัดการแสดงบริการแก่ผู้ใช้รายอื่น แอปพลิเคชัน คุณยังใช้สิทธิ์เพื่อจำกัดเอนทิตีภายนอกที่ โต้ตอบกับบริการได้ โปรดดู
permission
android:foregroundServiceType
ระบุว่าบริการนั้นเป็น บริการที่ทำงานอยู่เบื้องหน้าซึ่งเป็นไปตาม Use Case เฉพาะ เช่น บริการที่ทำงานอยู่เบื้องหน้าประเภท
"location"
บ่งบอกว่าแอปกำลังอัปเดตอุปกรณ์ให้เป็นปัจจุบัน ตำแหน่ง โดยทั่วไปจะเป็น ดำเนินการต่อ การดำเนินการที่เริ่มต้นโดยผู้ใช้ที่เกี่ยวข้องกับตำแหน่งของอุปกรณ์คุณกำหนดบริการที่ทำงานอยู่เบื้องหน้าได้หลายประเภทให้กับ service.
android:icon
- ไอคอนที่แสดงถึงบริการ แอตทริบิวต์นี้ได้รับการตั้งค่าเป็น
การอ้างอิงไปยังทรัพยากรที่ถอนออกได้ที่มีคำจำกัดความของรูปภาพ
หากไม่ได้ตั้งค่าไว้ ไอคอนที่ระบุไว้สำหรับแอปพลิเคชัน
จะใช้จำนวนเต็มแทน โปรดดู
<application>
แอตทริบิวต์icon
ขององค์ประกอบไอคอนของบริการ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือตาม
<application>
ยังเป็นองค์ประกอบ ไอคอนเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของบริการ โปรดดู ขององค์ประกอบ<intent-filter>
icon
android:isolatedProcess
- หากตั้งค่าเป็น
"true"
บริการนี้จะทำงานภายใต้กระบวนการพิเศษที่แยกออกจาก ส่วนที่เหลือของระบบและไม่มีสิทธิ์ของตนเอง วิธีเดียวคือการสื่อสารผ่าน Service API โดย ที่ผูกไว้และเริ่มต้น android:label
- ชื่อบริการที่ผู้ใช้อ่านได้
หากไม่ได้ตั้งค่าแอตทริบิวต์นี้ ป้ายกำกับที่ตั้งไว้สำหรับแอปพลิเคชันโดยรวมจะเป็น
ใช้แทน ดูองค์ประกอบ
<application>
label
ป้ายกำกับของบริการ ไม่ว่าจะตั้งค่าไว้ที่นี่หรือตามแท็ก
<application>
ยังเป็นองค์ประกอบ ป้ายกำกับเริ่มต้นสำหรับตัวกรอง Intent ทั้งหมดของบริการ โปรดดู ขององค์ประกอบ<intent-filter>
label
ป้ายกำกับได้รับการตั้งค่าเป็นการอ้างอิงไปยังทรัพยากรสตริง ดังนั้น สามารถแปลได้เหมือนกับสตริงอื่นๆ ในอินเทอร์เฟซผู้ใช้ แต่เพื่อความสะดวก ในระหว่างที่คุณพัฒนาแอปพลิเคชัน ยังสามารถตั้งค่าเป็นสตริงดิบได้
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
ของตัวเองเพื่อ ช่วยให้คุณกระจายข้อมูล การใช้งานในหลายกระบวนการหากชื่อที่กำหนดให้กับแอตทริบิวต์นี้ขึ้นต้นด้วยเครื่องหมายโคลอน (
:
) ซึ่งเป็นแบบส่วนตัวสำหรับแอปพลิเคชัน จะสร้างขึ้นเมื่อจำเป็น และ บริการจะทำงานในกระบวนการนั้นหากชื่อกระบวนการขึ้นต้นด้วยอักขระตัวพิมพ์เล็ก บริการจะทำงาน ในกระบวนการส่วนกลางของชื่อนั้น หากชื่อนั้นได้รับอนุญาตให้ดำเนินการดังกล่าว ทำให้คอมโพเนนต์ต่างๆ ในแอปพลิเคชันต่างๆ สามารถแบ่งปันกระบวนการได้โดย การใช้ทรัพยากร
- ดูเพิ่มเติม
<application>
<activity>
- เปิดตัวใน
- API ระดับ 1
ตัวอย่างเนื้อหาและโค้ดในหน้าเว็บนี้ขึ้นอยู่กับใบอนุญาตที่อธิบายไว้ในใบอนุญาตการใช้เนื้อหา Java และ OpenJDK เป็นเครื่องหมายการค้าหรือเครื่องหมายการค้าจดทะเบียนของ Oracle และ/หรือบริษัทในเครือ
อัปเดตล่าสุด 2024-08-20 UTC
[{
"type": "thumb-down",
"id": "missingTheInformationINeed",
"label":"ไม่มีข้อมูลที่ฉันต้องการ"
},{
"type": "thumb-down",
"id": "tooComplicatedTooManySteps",
"label":"ซับซ้อนเกินไป/มีหลายขั้นตอนมากเกินไป"
},{
"type": "thumb-down",
"id": "outOfDate",
"label":"ล้าสมัย"
},{
"type": "thumb-down",
"id": "translationIssue",
"label":"ปัญหาเกี่ยวกับการแปล"
},{
"type": "thumb-down",
"id": "samplesCodeIssue",
"label":"ตัวอย่าง/ปัญหาเกี่ยวกับโค้ด"
},{
"type": "thumb-down",
"id": "otherDown",
"label":"อื่นๆ"
}]
[{
"type": "thumb-up",
"id": "easyToUnderstand",
"label":"เข้าใจง่าย"
},{
"type": "thumb-up",
"id": "solvedMyProblem",
"label":"แก้ปัญหาของฉันได้"
},{
"type": "thumb-up",
"id": "otherUp",
"label":"อื่นๆ"
}]
{
"last_modified": "อัปเดตล่าสุด 2024-08-20 UTC",
"state": ""
}