เริ่มตั้งแต่ Android 14 (API ระดับ 34) คุณต้องประกาศประเภทบริการที่เหมาะสมสำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละรายการ ซึ่งหมายความว่าคุณต้องประกาศประเภทบริการในไฟล์ Manifest ของแอป และขอสิทธิ์บริการที่ทำงานอยู่เบื้องหน้าที่เหมาะสมกับประเภทดังกล่าวด้วย (นอกเหนือจากการขอสิทธิ์ FOREGROUND_SERVICE
) นอกจากนี้ คุณอาจต้องขอสิทธิ์รันไทม์ก่อนเปิดตัวบริการ ทั้งนี้ขึ้นอยู่กับประเภทบริการที่ทำงานอยู่เบื้องหน้า
กล้อง
- Foreground service type to declare in manifest under
android:foregroundServiceType camera- Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- Runtime prerequisites
Request and be granted the
CAMERAruntime permission- Description
Continue to access the camera from the background, such as video chat apps that allow for multitasking.
อุปกรณ์ที่เชื่อมต่อ
- Foreground service type to declare in manifest under
android:foregroundServiceTypeconnectedDevice- Permission to declare in your manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- Runtime prerequisites
At least one of the following conditions must be true:
Declare at least one of the following permissions in your manifest:
Request and be granted at least one of the following runtime permissions:
- Description
Interactions with external devices that require a Bluetooth, NFC, IR, USB, or network connection.
- Alternatives
If your app needs to do continuous data transfer to an external device, consider using the companion device manager instead. Use the companion device presence API to help your app stay running while the companion device is in range.
If your app needs to scan for bluetooth devices, consider using the Bluetooth scan API instead.
การซิงค์ข้อมูล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ 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 แทน
สื่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceTypemediaPlayback- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
เล่นเสียงหรือวิดีโออย่างต่อเนื่องจากเบื้องหลัง รองรับฟังก์ชันการบันทึกวิดีโอดิจิทัล (DVR) ใน Android TV
- ทางเลือก
หากแสดงวิดีโอแบบภาพซ้อนภาพ ให้ใช้โหมดภาพซ้อนภาพ
กำลังประมวลผลสื่อ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ 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 หรือต่ำกว่า ในอุปกรณ์ที่ใช้เวอร์ชันดังกล่าว หากบริการประมวลผลสื่อถึงระยะเวลาหมดเวลา ระบบจะแคชแอปทันที ด้วยเหตุนี้ แอปของคุณจึงไม่ควรรอรับการแจ้งเตือนการหมดเวลา แต่ควรสิ้นสุดบริการที่ทำงานอยู่เบื้องหน้าหรือเปลี่ยนเป็นบริการที่ทำงานอยู่เบื้องหลังโดยเร็วที่สุด
การฉายภาพสื่อ
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProjection- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Runtime prerequisites
Call the
createScreenCaptureIntent()method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection().- Description
Project content to non-primary display or external device using the
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
ไมโครโฟน
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceTypemicrophone- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MICROPHONE- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- ข้อกำหนดเบื้องต้นของรันไทม์
ขอและรับสิทธิ์รันไทม์
RECORD_AUDIO- คำอธิบาย
บันทึกเสียงจากไมโครโฟนอย่างต่อเนื่องจากเบื้องหลัง เช่น เครื่องบันทึกเสียงหรือ แอปการสื่อสาร
การโทร
- Foreground service type to declare in manifest under
android:foregroundServiceTypephoneCall- Permission to declare in your manifest
FOREGROUND_SERVICE_PHONE_CALL- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_PHONE_CALL- Runtime prerequisites
At least one of these conditions must be true:
- App has declared the
MANAGE_OWN_CALLSpermission in its manifest file.
- App has declared the
- App is the default dialer app through the
ROLE_DIALERrole.
- App is the default dialer app through the
- Description
Continue an ongoing call using the
ConnectionServiceAPIs.- Alternatives
If you need to make phone, video, or VoIP calls, consider using the
android.telecomlibrary.Consider using
CallScreeningServiceto screen calls.
การรับส่งข้อความระยะไกล
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceTyperemoteMessaging- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- ข้อกําหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
- โอน SMS จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่อง ช่วยเหลืองานการรับส่งข้อความของผู้ใช้ให้มีความต่อเนื่องเมื่อเปลี่ยนอุปกรณ์
บริการระยะสั้น
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ 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>
ได้รับการยกเว้นจากระบบ
- ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceTypesystemExempted- สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- ค่าคงที่ที่จะส่งไปยัง
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- ข้อกำหนดเบื้องต้นของรันไทม์
- ไม่มี
- คำอธิบาย
สงวนไว้สำหรับแอปพลิเคชันของระบบและการผสานรวมระบบที่เฉพาะเจาะจง เพื่อให้ใช้บริการที่ทำงานอยู่เบื้องหน้าต่อไปได้
หากต้องการใช้ประเภทนี้ แอปต้องมีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้อย่างน้อย 1 ข้อ
- อุปกรณ์อยู่ในสถานะโหมดสาธิต
- แอปเป็นเจ้าของอุปกรณ์
- แอปเป็นเจ้าของ Profiler
- แอปความปลอดภัยที่มีบทบาท
ROLE_EMERGENCY - แอปผู้ดูแลระบบอุปกรณ์
- แอปที่มีสิทธิ์
SCHEDULE_EXACT_ALARMหรือUSE_EXACT_ALARM แอป VPN (กำหนดค่าโดยใช้การตั้งค่า > เครือข่ายและอินเทอร์เน็ต > VPN)
มิเช่นนั้น การประกาศประเภทนี้จะทำให้ระบบแสดง
ForegroundServiceTypeNotAllowedException
การบังคับใช้นโยบายของ Google Play สำหรับการใช้ประเภทบริการที่ทำงานอยู่เบื้องหน้า
If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.