ตั้งแต่ Android 14 (ระดับ API 34) เป็นต้นไป คุณต้องประกาศประเภทบริการที่เหมาะสมสำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละรายการ ซึ่งหมายความว่าคุณต้องประกาศประเภทบริการในไฟล์ Manifest ของแอป และขอสิทธิ์บริการที่ทำงานอยู่เบื้องหน้าที่เหมาะสมสำหรับประเภทดังกล่าวด้วย (นอกเหนือจากการขอสิทธิ์ FOREGROUND_SERVICE) นอกจากนี้ คุณอาจต้องขอสิทธิ์รันไทม์ก่อนเปิดบริการ ทั้งนี้ขึ้นอยู่กับประเภทบริการที่ทำงานอยู่เบื้องหน้า
กล้อง
- 要在清单中的
android:foregroundServiceType下声明的前台服务类型 camera- 要在清单中声明的权限
FOREGROUND_SERVICE_CAMERA- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_CAMERA- 运行时前提条件
请求并获得
CAMERA运行时权限- 说明
继续在后台访问相机,例如支持多任务的视频聊天应用。
อุปกรณ์ที่เชื่อมต่อ
- 要在清单中的以下位置声明的前台服务类型
android:foregroundServiceTypeconnectedDevice- 在清单中声明的权限
FOREGROUND_SERVICE_CONNECTED_DEVICE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- 运行时前提条件
必须至少满足以下其中一个条件:
在清单中至少声明以下其中一项权限:
至少请求并被授予以下其中一项运行时权限:
- 说明
与需要蓝牙、NFC、IR、USB 或网络连接的外部设备进行互动。
- 替代方案
如果您的应用需要向外部设备持续传输数据,请考虑改用配套设备管理器。使用配套设备感知 API,可帮助您的应用在配套设备在范围内时保持运行。
如果您的应用需要扫描蓝牙设备,请考虑改用 Bluetooth Scan API。
ซิงค์ข้อมูล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceTypedataSync- สิทธิ์ที่จะประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_DATA_SYNC- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
การดำเนินการโอนข้อมูล เช่น
- การอัปโหลดหรือดาวน์โหลดข้อมูล
- การดำเนินการสำรองและกู้คืนข้อมูล
- การดำเนินการนำเข้าหรือส่งออก
- ดึงข้อมูล
- การประมวลผลไฟล์ในเครื่อง
- โอนข้อมูลระหว่างอุปกรณ์และระบบคลาวด์ผ่านเครือข่าย
- ทางเลือก
ดูข้อมูลโดยละเอียดได้ที่ทางเลือกอื่นนอกเหนือจากบริการที่ทำงานอยู่เบื้องหน้าสำหรับการซิงค์ข้อมูล
สุขภาพ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTypehealth- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_HEALTH- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- สิ่งที่ต้องดำเนินการก่อนสำหรับรันไทม์
เงื่อนไขต่อไปนี้อย่างน้อย 1 ข้อจะต้องเป็นจริง
ประกาศสิทธิ์
HIGH_SAMPLING_RATE_SENSORSในไฟล์ Manifestขอและได้รับสิทธิ์รันไทม์ต่อไปนี้อย่างน้อย 1 สิทธิ์
BODY_SENSORSใน API 35 และต่ำกว่าREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องเพื่อรองรับแอปในหมวดหมู่ฟิตเนส เช่น อุปกรณ์ติดตามการออกกำลังกาย
ตำแหน่ง
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTypelocation- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_LOCATION- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- ข้อกําหนดเบื้องต้นของรันไทม์
ผู้ใช้ต้องเปิดใช้บริการตำแหน่งและแอปต้องได้รับสิทธิ์รันไทม์อย่างน้อย 1 รายการต่อไปนี้
- คำอธิบาย
กรณีการใช้งานที่ทำงานต่อเนื่องซึ่งต้องใช้สิทธิ์เข้าถึงตำแหน่ง เช่น การนำทางและการแชร์ตำแหน่ง
- ทางเลือก
หากต้องการให้แอปทริกเกอร์เมื่อผู้ใช้ไปถึงสถานที่ที่เฉพาะเจาะจง ให้ลองใช้ Geofence API แทน
สื่อ
- 在清单中声明的前台服务类型
android:foregroundServiceTypemediaPlayback- 要在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PLAYBACK- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- 运行时前提条件
- 无
- 说明
在后台继续播放音频或视频。在 Android TV 上支持数字视频录制 (DVR) 功能。
- 替代方案
如果您要显示画中画视频,请使用画中画模式。
กำลังประมวลผลสื่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTypemediaProcessing- สิทธิ์ในการประกาศในไฟล์ 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:foregroundServiceTypemediaProjection- สิทธิ์ที่จะประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- ข้อกำหนดเบื้องต้นของรันไทม์
เรียกใช้เมธอด
createScreenCaptureIntent()ก่อนเริ่มบริการที่ทำงานอยู่เบื้องหน้า การดำเนินการนี้จะแสดงการแจ้งเตือนสิทธิ์แก่ผู้ใช้ โดยผู้ใช้ต้องให้สิทธิ์ก่อนที่คุณจะสร้างบริการได้หลังจากสร้างบริการที่ทำงานอยู่เบื้องหน้าแล้ว คุณจะเรียกใช้
MediaProjectionManager.getMediaProjection()ได้- คำอธิบาย
ฉายเนื้อหาไปยังจอแสดงผลที่ไม่ใช่อุปกรณ์หลักหรืออุปกรณ์ภายนอกโดยใช้ API
MediaProjectionเนื้อหานี้ไม่จำเป็นต้องเป็นเนื้อหาสื่อเท่านั้น- ทางเลือก
หากต้องการสตรีมสื่อไปยังอุปกรณ์อื่น ให้ใช้ Google Cast SDK
ไมโครโฟน
- 在清单中声明的前台服务类型
android:foregroundServiceTypemicrophone- 要在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE- 要传递给
startForeground()的常量 FOREGROUND_SERVICE_TYPE_MICROPHONE- 运行时前提条件
请求并获得
RECORD_AUDIO运行时权限。- 说明
在后台继续捕获麦克风内容,例如录音器或通信应用。
การโทร
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceTypephoneCall- สิทธิ์ที่จะประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_PHONE_CALL- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- ข้อกำหนดเบื้องต้นของรันไทม์
เงื่อนไขต่อไปนี้ต้องเป็นจริงอย่างน้อย 1 ข้อ
- แอปได้ประกาศสิทธิ์
MANAGE_OWN_CALLSในไฟล์ Manifest แล้ว
- แอปได้ประกาศสิทธิ์
- แอปเป็นแอปโทรศัพท์เริ่มต้นผ่านบทบาท
ROLE_DIALER
- แอปเป็นแอปโทรศัพท์เริ่มต้นผ่านบทบาท
- คำอธิบาย
โทรต่อโดยใช้ API
ConnectionService- ทางเลือก
หากต้องการโทรศัพท์ วิดีโอคอล หรือโทรผ่าน VoIP ให้พิจารณาใช้ไลบรารี
android.telecomลองใช้
CallScreeningServiceเพื่อสกรีนสายเรียกเข้า
การรับส่งข้อความระยะไกล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTyperemoteMessaging- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
- โอน SMS จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่อง ช่วยเหลืองานการรับส่งข้อความของผู้ใช้ให้มีความต่อเนื่องเมื่อเปลี่ยนอุปกรณ์
Shorts
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTypeshortService- สิทธิ์ในการประกาศในไฟล์ 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:foregroundServiceTypespecialUse- สิทธิ์ในการประกาศในไฟล์ 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:foregroundServiceTypesystemExempted- 在清单中声明的权限
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 Console (นโยบาย > เนื้อหาแอป) ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าใน Play Console ได้ที่การทำความเข้าใจบริการที่ทำงานอยู่เบื้องหน้าและข้อกำหนดของ Intent แบบเต็มหน้าจอ