ประเภทบริการที่ทำงานอยู่เบื้องหน้า

เริ่มตั้งแต่ 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 ข้อจะต้องเป็นจริง

คำอธิบาย

การโต้ตอบกับอุปกรณ์ภายนอกที่ต้องใช้การเชื่อมต่อบลูทูธ, 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 ข้อจะต้องเป็นจริง

คำอธิบาย

กรณีการใช้งานที่ทำงานต่อเนื่องเพื่อรองรับแอปในหมวดหมู่ฟิตเนส เช่น อุปกรณ์ติดตามการออกกำลังกาย

ตำแหน่ง

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ 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) 功能。

替代方案

如果您要显示画中画视频,请使用画中画模式

กำลังประมวลผลสื่อ

要在清单中的以下位置声明的前台服务类型
android:foregroundServiceType
mediaProcessing
在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PROCESSING
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING
运行时前提条件
说明

用于对媒体资源执行耗时的操作(例如将媒体转换为其他格式)的服务。系统允许此服务运行的时间有限;在正常情况下,此时限为每天 24 小时中的 6 小时。(此限制由应用的所有 mediaProcessing 前台服务共享。)

在以下情况下,您的应用应手动停止媒体处理服务:

如果超时期限已到,系统会调用服务的 Service.onTimeout(int, int) 方法。此时,该服务有几秒钟的时间来调用 Service.stopSelf()。如果服务未调用 Service.stopSelf(),则会发生 ANR,并显示以下错误消息:“<fgs_type> 的前台服务未在超时时间内停止:<component_name>”。

注意Service.onTimeout(int, int) 不适用于 Android 14 或更低版本。在搭载这些版本的设备上,如果媒体处理服务达到超时期限,系统会立即缓存应用。因此,您的应用不应等待收到超时通知。相反,它应在适当情况下尽快终止前台服务或将其更改为后台服务。

การฉายภาพสื่อ

要在清单中声明的前台服务类型,位于
android:foregroundServiceType
mediaProjection
要在清单中声明的权限
FOREGROUND_SERVICE_MEDIA_PROJECTION
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
运行时前提条件

在启动前台服务之前,调用 createScreenCaptureIntent() 方法。这样做会向用户显示权限通知;用户必须授予权限,您才能创建服务。

创建前台服务后,您可以调用 MediaProjectionManager.getMediaProjection()

说明

使用 MediaProjection API 将内容投影到非主要显示屏或外部设备。这些内容不必全都为媒体内容。

替代方案

如需将媒体内容流式传输到其他设备,请使用 Google Cast SDK

ไมโครโฟน

要在清单中声明的前台服务类型,位于
android:foregroundServiceType
microphone
要在清单中声明的权限
FOREGROUND_SERVICE_MICROPHONE
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_MICROPHONE
运行时前提条件

请求并被授予 RECORD_AUDIO 运行时权限。

说明

在后台继续捕获麦克风内容,例如录音器或通信应用。

การโทร

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่ต้องประกาศในไฟล์ Manifest ภายใต้
android:foregroundServiceType
phoneCall
สิทธิ์ในการประกาศในไฟล์ 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: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
运行时前提条件
说明

为系统应用和特定系统集成预留,以便继续使用前台服务。

如需使用此类型,应用必须至少满足以下条件之一:

การบังคับใช้นโยบายของ Google Play สำหรับการใช้ประเภทบริการที่ทำงานอยู่เบื้องหน้า

หากแอปกำหนดเป้าหมายเป็น Android 14 ขึ้นไป คุณจะต้องประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าของแอปในหน้าเนื้อหาแอปของ Play Console (นโยบาย > เนื้อหาแอป) ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีประกาศประเภทบริการที่ทำงานอยู่เบื้องหน้าใน Play Console ได้ที่การทำความเข้าใจบริการที่ทำงานอยู่เบื้องหน้าและข้อกำหนดของ Intent แบบเต็มหน้าจอ