เริ่มตั้งแต่ Android 14 (API ระดับ 34) คุณต้องประกาศ
ประเภทบริการที่เหมาะสมสำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละรายการ ซึ่งหมายความว่าคุณต้องประกาศประเภทบริการในไฟล์ Manifest ของแอป และขอสิทธิ์บริการที่ทำงานอยู่เบื้องหน้าที่เหมาะสมกับประเภทดังกล่าวด้วย (นอกเหนือจากการขอสิทธิ์ FOREGROUND_SERVICE
) นอกจากนี้ คุณอาจต้องขอสิทธิ์รันไทม์ก่อนเปิดตัวบริการ ทั้งนี้ขึ้นอยู่กับประเภทบริการที่ทำงานอยู่เบื้องหน้า
กล้อง
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใน
android:foregroundServiceType
camera
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_CAMERA
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
- ข้อกำหนดเบื้องต้นของรันไทม์
ขอและรับสิทธิ์แบบรันไทม์
CAMERA
- คำอธิบาย
การเข้าถึงกล้องจากเบื้องหลังอย่างต่อเนื่อง เช่น แอปวิดีโอแชท ที่อนุญาตให้ทำงานหลายอย่างพร้อมกันได้
อุปกรณ์ที่เชื่อมต่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
connectedDevice
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
- ข้อกําหนดเบื้องต้นของรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
ประกาศสิทธิ์ต่อไปนี้อย่างน้อย 1 รายการในไฟล์ Manifest
ขอและได้รับสิทธิ์รันไทม์ต่อไปนี้อย่างน้อย 1 สิทธิ์
- คำอธิบาย
การโต้ตอบกับอุปกรณ์ภายนอกที่ต้องใช้การเชื่อมต่อบลูทูธ, NFC, IR, USB หรือเครือข่าย
- ทางเลือก
หากแอปของคุณต้องโอนข้อมูลไปยังอุปกรณ์ภายนอกอย่างต่อเนื่อง ให้ลองใช้เครื่องมือจัดการอุปกรณ์ที่ใช้ร่วมกันแทน ใช้ companion device presence API เพื่อช่วยให้คุณแอปทำงานต่อไปได้ขณะที่อุปกรณ์ที่ใช้ร่วมกันอยู่ในระยะสัญญาณ
หากแอปของคุณต้องสแกนหาอุปกรณ์บลูทูธ ให้ลองใช้ Bluetooth Scan API แทน
การซิงค์ข้อมูล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceType
dataSync
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_DATA_SYNC
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
การดำเนินการโอนข้อมูล เช่น
- การอัปโหลดหรือดาวน์โหลดข้อมูล
- การดำเนินการสำรองและกู้คืนข้อมูล
- การดำเนินการนำเข้าหรือส่งออก
- ดึงข้อมูล
- การประมวลผลไฟล์ในเครื่อง
- โอนข้อมูลระหว่างอุปกรณ์กับระบบคลาวด์ผ่านเครือข่าย
- ทางเลือก
ดูข้อมูลโดยละเอียดได้ที่ทางเลือกแทนบริการที่ทำงานเบื้องหน้าสำหรับการซิงค์ข้อมูล
สุขภาพ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
health
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_HEALTH
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_HEALTH
- สิ่งที่ต้องดำเนินการก่อนสำหรับรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
ประกาศสิทธิ์
HIGH_SAMPLING_RATE_SENSORS
ในไฟล์ Manifestขอและได้รับสิทธิ์รันไทม์ต่อไปนี้อย่างน้อย 1 สิทธิ์
BODY_SENSORS
ใน API 35 และต่ำกว่าREAD_HEART_RATE
READ_SKIN_TEMPERATURE
READ_OXYGEN_SATURATION
ACTIVITY_RECOGNITION
- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องเพื่อรองรับแอปในหมวดหมู่ฟิตเนส เช่น อุปกรณ์ติดตามการออกกำลังกาย
ตำแหน่ง
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
location
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_LOCATION
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_LOCATION
- ข้อกําหนดเบื้องต้นของรันไทม์
ผู้ใช้ต้องเปิดใช้บริการตำแหน่งและแอปต้องได้รับสิทธิ์รันไทม์อย่างน้อย 1 รายการต่อไปนี้
- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องซึ่งต้องใช้สิทธิ์เข้าถึงตำแหน่ง เช่น การนำทางและการแชร์ตำแหน่ง
- ทางเลือก
หากต้องการให้แอปทริกเกอร์เมื่อผู้ใช้ไปถึงสถานที่ที่เฉพาะเจาะจง ให้ลองใช้ Geofence API แทน
สื่อ
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceType
mediaPlayback
- 要在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
- 运行时前提条件
- 无
- 说明
在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
- 替代方案
如果您要显示画中画视频,请使用画中画模式。
กำลังประมวลผลสื่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
mediaProcessing
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PROCESSING
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
บริการสําหรับดําเนินการกับชิ้นงานสื่อที่ใช้เวลานาน เช่น การเปลี่ยนรูปแบบสื่อ ระบบอนุญาตให้บริการนี้ทำงานได้ในช่วงเวลาที่จำกัด โดยปกติแล้วขีดจำกัดเวลานี้จะเท่ากับ 6 ชั่วโมงจาก 24 ชั่วโมง (ขีดจำกัดนี้จะแชร์โดย
mediaProcessing
บริการที่ทำงานอยู่เบื้องหน้าทั้งหมดของแอป)แอปของคุณควรหยุดบริการประมวลผลสื่อด้วยตนเองในสถานการณ์ต่อไปนี้
- เมื่อการดำเนินการเปลี่ยนรูปแบบเสร็จสิ้นหรือถึงสถานะไม่สำเร็จ ให้เรียกใช้บริการ
Service.stopForeground()
และService.stopSelf()
เพื่อหยุดบริการโดยสมบูรณ์
- เมื่อการดำเนินการเปลี่ยนรูปแบบเสร็จสิ้นหรือถึงสถานะไม่สำเร็จ ให้เรียกใช้บริการ
หากถึงระยะเวลาหมดเวลา ระบบจะเรียกใช้เมธอด
Service.onTimeout(int, int)
ของบริการ ขณะนี้บริการมีเวลา 2-3 วินาทีในการเรียกService.stopSelf()
หากบริการไม่ได้เรียกใช้Service.stopSelf()
ระบบจะแสดง ANR พร้อมข้อความแสดงข้อผิดพลาด "บริการที่ทำงานอยู่เบื้องหน้าของ <fgs_type> ไม่ได้หยุดภายในระยะหมดเวลา: <component_name>"หมายเหตุ:
Service.onTimeout(int, int)
ไม่พร้อมใช้งานใน Android 14 หรือต่ำกว่า ในอุปกรณ์ที่ใช้เวอร์ชันดังกล่าว หากบริการประมวลผลสื่อถึงระยะเวลาหมดเวลา ระบบจะแคชแอปทันที ด้วยเหตุนี้ แอปของคุณจึงไม่ควรรอรับการแจ้งเตือนการหมดเวลา แต่ควรสิ้นสุดบริการที่ทำงานอยู่เบื้องหน้าหรือเปลี่ยนเป็นบริการที่ทำงานอยู่เบื้องหลังโดยเร็วที่สุด
การฉายภาพสื่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceType
mediaProjection
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
- ข้อกำหนดเบื้องต้นของรันไทม์
เรียกใช้เมธอด
createScreenCaptureIntent()
ก่อนเริ่มบริการที่ทำงานอยู่เบื้องหน้า การดำเนินการนี้จะแสดงการแจ้งเตือนสิทธิ์ต่อผู้ใช้ ผู้ใช้ต้องให้สิทธิ์ก่อนที่คุณจะสร้างบริการได้หลังจากสร้าง Foreground Service แล้ว คุณจะเรียกใช้
MediaProjectionManager.getMediaProjection()
ได้- คำอธิบาย
ฉายเนื้อหาไปยังจอแสดงผลที่ไม่ใช่อุปกรณ์หลักหรืออุปกรณ์ภายนอกโดยใช้
MediaProjection
API เนื้อหานี้ไม่จำเป็นต้องเป็นเนื้อหาสื่อเพียงอย่างเดียว- ทางเลือก
หากต้องการสตรีมสื่อไปยังอุปกรณ์อื่น ให้ใช้ Google Cast SDK
ไมโครโฟน
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceType
microphone
- 要在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_MICROPHONE
- 运行时前提条件
请求并被授予
RECORD_AUDIO
运行时权限。- 说明
在后台继续捕获麦克风内容,例如录音器或通信应用。
การโทร
- 要在清单中声明的前台服务类型,位于
android:foregroundServiceType
phoneCall
- 要在清单中声明的权限
FOREGROUND_SERVICE_PHONE_CALL
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_PHONE_CALL
- 运行时前提条件
必须满足以下至少一个条件:
- 应用已在其清单文件中声明
MANAGE_OWN_CALLS
权限。
- 应用已在其清单文件中声明
- 应用通过
ROLE_DIALER
角色成为默认的拨号器应用。
- 应用通过
- 说明
使用
ConnectionService
API 继续当前通话。- 替代方案
如果您需要拨打手机、视频或 VoIP 电话,不妨考虑使用
android.telecom
库。考虑使用
CallScreeningService
来过滤来电。
การรับส่งข้อความระยะไกล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
remoteMessaging
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
- โอน SMS จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่อง ช่วยเหลืองานการรับส่งข้อความของผู้ใช้ให้มีความต่อเนื่องเมื่อเปลี่ยนอุปกรณ์
บริการระยะสั้น
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
shortService
- สิทธิ์ในการประกาศในไฟล์ Manifest
- ไม่มี
- ค่าคงที่ที่จะส่งไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
ทำงานที่สำคัญซึ่งต้องดำเนินการให้เสร็จโดยไม่มีการหยุดชะงักหรือเลื่อนออกไปได้อย่างรวดเร็ว
ประเภทนี้มีเอกลักษณ์เฉพาะตัวดังนี้
- ทำงานได้เพียงระยะเวลาสั้นๆ (ประมาณ 3 นาที)
- ไม่รองรับบริการที่ทำงานอยู่เบื้องหน้าแบบติดหนึบ
- เริ่มบริการอื่นๆ ที่ทำงานอยู่เบื้องหน้าไม่ได้
- ไม่ต้องมีสิทธิ์เฉพาะประเภท แต่ยังคงต้องใช้สิทธิ์
FOREGROUND_SERVICE
shortService
จะเปลี่ยนเป็นบริการประเภทอื่นได้ก็ต่อเมื่อแอปมีสิทธิ์เริ่มบริการที่ทำงานอยู่เบื้องหน้าใหม่- บริการที่ทำงานอยู่เบื้องหน้าสามารถเปลี่ยนประเภทเป็น
shortService
ได้ทุกเมื่อ ซึ่งจะเป็นจุดเริ่มต้นของระยะเวลาหมดเวลา
การหมดเวลาสําหรับ shortService จะเริ่มนับตั้งแต่ที่มีการเรียกใช้
Service.startForeground()
แอปควรเรียกใช้Service.stopSelf()
หรือService.stopForeground()
ก่อนที่จะเกิดเวลาหมด ไม่เช่นนั้น ระบบจะเรียกService.onTimeout()
ใหม่ ซึ่งแอปจะมีเวลาสั้นๆ ในการเรียกstopSelf()
หรือstopForeground()
เพื่อหยุดให้บริการหลังจากเรียก
Service.onTimeout()
ไม่นาน แอปจะเข้าสู่สถานะแคชและระบบจะไม่ถือว่าแอปอยู่ในเบื้องหน้าอีกต่อไป เว้นแต่ผู้ใช้จะโต้ตอบกับแอปอยู่ ไม่นานหลังจากที่แอปแคชและบริการยังไม่หยุดทำงาน แอปจะได้รับ ANR ข้อความ ANRP พูดถึงFOREGROUND_SERVICE_TYPE_SHORT_SERVICE
ด้วยเหตุนี้ การใช้Service.onTimeout()
การเรียกกลับจึงถือเป็นแนวทางปฏิบัติแนะนำฟีเจอร์ติดต่อกลับ
Service.onTimeout()
ไม่มีให้บริการใน Android 13 และต่ำกว่า หากบริการเดียวกันทำงานในอุปกรณ์ดังกล่าว บริการจะไม่หมดเวลาและจะไม่เกิด ANR ตรวจสอบว่าบริการหยุดทำงานทันทีที่ประมวลผลงานเสร็จ แม้ว่าจะยังไม่ได้รับService.onTimeout()
callback ก็ตามโปรดทราบว่าหากไม่ปฏิบัติตามการหมดเวลาของ
shortService
แอปจะแสดง ANR แม้ว่าจะมีบริการที่ทำงานอยู่เบื้องหน้าอื่นๆ ที่ถูกต้องหรือกระบวนการอื่นๆ ของวงจรชีวิตของแอปที่ทำงานอยู่ก็ตามหากผู้ใช้มองเห็นแอปหรือแอปเป็นไปตามข้อยกเว้นข้อใดข้อหนึ่งซึ่งอนุญาตให้เริ่มบริการที่ทำงานอยู่เบื้องหน้าจากเบื้องหลังได้ การเรียกใช้
Service.StartForeground()
อีกครั้งด้วยพารามิเตอร์FOREGROUND_SERVICE_TYPE_SHORT_SERVICE
จะขยายเวลาหมดเวลาอีก 3 นาที หากผู้ใช้ไม่เห็นแอปและไม่เป็นไปตามข้อยกเว้นข้อใดข้อหนึ่ง การพยายามเริ่มบริการที่ทำงานอยู่เบื้องหน้าอีกรายการหนึ่งไม่ว่าประเภทใดก็ตามจะทำให้เกิดForegroundServiceStartNotAllowedException
หากผู้ใช้ปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่สำหรับแอปของคุณ แอปจะยังคงได้รับผลกระทบจากการหมดเวลาของ FGS บริการระยะสั้น
หากคุณเริ่มบริการที่ทำงานอยู่เบื้องหน้าซึ่งมีประเภท
shortService
และประเภทบริการที่ทำงานอยู่เบื้องหน้าอื่น ระบบจะไม่สนใจการประกาศประเภทshortService
อย่างไรก็ตาม บริการดังกล่าวยังคงต้องเป็นไปตามข้อกําหนดเบื้องต้นของประเภทอื่นๆ ที่ประกาศไว้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับบริการที่ทำงานอยู่เบื้องหน้า
การใช้งานพิเศษ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceType
specialUse
- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_SPECIAL_USE
- ค่าคงที่ที่จะส่งผ่านไปยัง
startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
ครอบคลุมกรณีการใช้งานบริการที่ทำงานอยู่เบื้องหน้าที่ถูกต้องซึ่งไม่ครอบคลุมในกรณีการใช้งานอื่น ประเภทบริการที่ทำงานอยู่เบื้องหน้า
นอกจากการประกาศ
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
ประเภทบริการที่ทำงานอยู่เบื้องหน้า นักพัฒนาแอปควรประกาศกรณีการใช้งานใน ไฟล์ Manifest ซึ่งวิธีการคือการระบุองค์ประกอบ<property>
ภายในองค์ประกอบ องค์ประกอบ<service>
ค่าเหล่านี้และกรณีการใช้งานที่เกี่ยวข้อง ตรวจสอบเมื่อคุณส่งแอปใน Google Play Console การใช้งาน กรณีที่คุณใส่นั้นอยู่ในรูปแบบอิสระ และควรตรวจสอบว่าได้ใส่ เพื่อช่วยให้ผู้ตรวจสอบทราบเหตุผลที่คุณต้องใช้specialUse
ประเภท<service android:name="fooService" android:foregroundServiceType="specialUse"> <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE" android:value="explanation_for_special_use"/> </service>
ได้รับการยกเว้นจากระบบ
- 要在其清单中声明的前台服务类型
android:foregroundServiceType
systemExempted
- 在清单中声明的权限
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
- 要传递给
startForeground()
的常量 FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
- 运行时前提条件
- 无
- 说明
为系统应用和特定系统集成预留,以便继续使用前台服务。
如需使用此类型,应用必须至少满足以下条件之一:
- 设备处于演示模式状态
- 应用是设备所有者
- 应用是性能分析器所有者
- 属于具有
ROLE_EMERGENCY
角色的安全应用 - 属于设备管理应用
- 具有
SCHEDULE_EXACT_ALARM
或USE_EXACT_ALARM
权限的应用 VPN 应用(通过设置 > 网络和互联网 > VPN 进行配置)
否则,声明此类型会导致系统抛出
ForegroundServiceTypeNotAllowedException
。
การบังคับใช้นโยบายของ Google Play สำหรับการใช้ประเภทบริการที่ทำงานอยู่เบื้องหน้า
如果您的应用以 Android 14 或更高版本为目标平台,您需要在 Play 管理中心的“应用内容”页面(政策 > 应用内容)中声明应用的前台服务类型。如需详细了解如何在 Play 管理中心内声明前台服务类型,请参阅了解前台服务和全屏 intent 要求。