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

ตั้งแต่ Android 14 (API ระดับ 34) เป็นต้นไป คุณต้องประกาศประเภทบริการที่เหมาะสมสำหรับบริการที่ทำงานอยู่เบื้องหน้าแต่ละรายการ ซึ่งหมายความว่าคุณต้องประกาศประเภทบริการในไฟล์ Manifest ของแอป รวมถึงขอสิทธิ์บริการที่ทำงานอยู่เบื้องหน้าที่เหมาะสมสำหรับประเภทนั้นด้วย (นอกเหนือจากการขอสิทธิ์ FOREGROUND_SERVICE) นอกจากนี้ คุณอาจต้องขอสิทธิ์รันไทม์ก่อนเปิดตัวบริการ ทั้งนี้ขึ้นอยู่กับประเภทบริการที่ทำงานอยู่เบื้องหน้า

กล้อง

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน android:foregroundServiceType
camera
สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_CAMERA
ค่าคงที่ที่จะส่งไปยัง startForeground()
FOREGROUND_SERVICE_TYPE_CAMERA
ข้อกําหนดเบื้องต้นของรันไทม์

ขอและได้รับสิทธิ์รันไทม์ CAMERA

คำอธิบาย

การเข้าถึงกล้องจากเบื้องหลังอย่างต่อเนื่อง เช่น แอปวิดีโอแชทที่อนุญาตให้ทำงานหลายอย่างพร้อมกันได้

อุปกรณ์ที่เชื่อมต่อ

要在其清单中声明的前台服务类型
android:foregroundServiceType
connectedDevice
在清单中声明的权限
FOREGROUND_SERVICE_CONNECTED_DEVICE
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
运行时前提条件

必须至少满足以下其中一个条件:

说明

与需要蓝牙、NFC、IR、USB 或网络连接的外部设备进行互动。

替代方案

如果您的应用需要持续将数据传输到外部设备,请考虑改用配套设备管理器。使用配套设备在线状态 API 帮助您的应用在配套设备在范围内时保持运行。

如果您的应用需要扫描蓝牙设备,请考虑改用 Bluetooth Scanner 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 แทน

สื่อ

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
mediaPlayback
สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK
ค่าคงที่ที่จะส่งไปยัง startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
ข้อกําหนดเบื้องต้นของรันไทม์
ไม่มี
คำอธิบาย

เล่นเสียงหรือวิดีโออย่างต่อเนื่องจากเบื้องหลัง รองรับฟังก์ชันการบันทึกวิดีโอดิจิทัล (DVR) ใน Android TV

ทางเลือก

หากกำลังแสดงวิดีโอแบบภาพซ้อนภาพ ให้ใช้โหมดภาพซ้อนภาพ

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

要在其清单中声明的前台服务类型
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 或更低版本。在运行这些版本的设备上,如果媒体处理服务达到超时期限,系统会立即缓存应用。因此,您的应用不应等待收到超时通知。而是应尽快终止前台服务或将其更改为后台服务。

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

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
mediaProjection
สิทธิ์ในการประกาศในไฟล์ Manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION
ค่าคงที่ที่จะส่งไปยัง startForeground()
FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION
ข้อกําหนดเบื้องต้นของรันไทม์

เรียกใช้เมธอด createScreenCaptureIntent() ก่อนเริ่มบริการที่ทำงานอยู่เบื้องหน้า ซึ่งจะแสดงการแจ้งเตือนสิทธิ์ให้ผู้ใช้ทราบ ผู้ใช้ต้องให้สิทธิ์ก่อนที่คุณจึงจะสร้างบริการได้

หลังจากสร้างบริการที่ทำงานอยู่เบื้องหน้าแล้ว คุณจะเรียกใช้ MediaProjectionManager.getMediaProjection() ได้

คำอธิบาย

ฉายเนื้อหาไปยังจอแสดงผลที่ไม่ใช่อุปกรณ์หลักหรืออุปกรณ์ภายนอกโดยใช้ MediaProjection API เนื้อหานี้ไม่จำเป็นต้องเป็นเนื้อหาสื่อเท่านั้น

ทางเลือก

หากต้องการสตรีมสื่อไปยังอุปกรณ์อื่น ให้ใช้ Google Cast SDK

ไมโครโฟน

ประเภทบริการที่ทำงานอยู่เบื้องหน้าที่จะประกาศในไฟล์ Manifest ในส่วน
android:foregroundServiceType
microphone
สิทธิ์ในการประกาศในไฟล์ Manifest
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 เพื่อสกรีนสายเรียกเข้า

การรับส่งข้อความระยะไกล

要在其清单中声明的前台服务类型
android:foregroundServiceType
remoteMessaging
在清单中声明的权限
FOREGROUND_SERVICE_REMOTE_MESSAGING
要传递给 startForeground() 的常量
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
运行时前提条件
说明
将短信从一台设备转移到另一台设备。在用户切换设备时,帮助确保用户消息任务的连续性。

บริการสั้นๆ

要在其清单中声明的前台服务类型
android:foregroundServiceType
shortService
在清单中声明的权限
要传递给 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 消息。ANR 消息提及 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE。出于这些原因,实现 Service.onTimeout() 回调被视为一种最佳实践。

Android 13 及更低版本中不存在 Service.onTimeout() 回调。如果同一服务在此类设备上运行,则不会出现超时,也不会发生 ANR。确保您的服务在完成处理任务后立即停止,即使它尚未收到 Service.onTimeout() 回调也是如此。

请务必注意,如果未遵循 shortService 的超时设置,即使应用还有其他有效的前台服务或其他应用生命周期进程,应用也会遇到 ANR。

如果应用对用户可见,或满足允许从后台启动前台服务的某一豁免条件,则使用 FOREGROUND_SERVICE_TYPE_SHORT_SERVICE 参数再次调用 Service.StartForeground() 会将超时时间再延长 3 分钟。如果应用对用户不可见且不满足其中一个豁免条件,则尝试启动其他前台服务(无论其类型如何)都会导致 ForegroundServiceStartNotAllowedException

即使用户为您的应用停用电池优化功能,仍然会受到 shortService 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 แบบเต็มหน้าจอ