Ön plan hizmeti türleri

Android 14 (API düzeyi 34) sürümünden itibaren her ön plan hizmeti için uygun bir hizmet türü beyan etmeniz gerekir. Yani uygulama manifestinizde hizmet türünü beyan etmeniz ve bu tür için uygun ön plan hizmet iznini (FOREGROUND_SERVICE iznini istemenin yanı sıra) istemeniz gerekir. Ayrıca, ön plan hizmet türüne bağlı olarak hizmeti başlatmadan önce çalışma zamanında istenen izinleri talep etmeniz gerekebilir.

Kamera

android:foregroundServiceType altında manifest dosyasında beyan edilecek ön plan hizmet türü
camera
Manifest dosyanızda beyan edilecek izin
FOREGROUND_SERVICE_CAMERA
startForeground() yöntemine iletilecek sabit
FOREGROUND_SERVICE_TYPE_CAMERA
Çalışma zamanı ön koşulları

CAMERA çalışma zamanında istenen izni isteme ve alma

Açıklama

Çoklu görev gerçekleştirmeye izin veren görüntülü sohbet uygulamaları gibi arka planda kameraya erişmeye devam edin.

Bağlı cihaz

Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceType
connectedDevice
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_CONNECTED_DEVICE
startForeground() işlevine iletilecek sabit değer
FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE
Çalışma zamanı ön koşulları

Aşağıdaki koşullardan en az biri doğru olmalıdır:

Açıklama

Bluetooth, NFC, IR, USB veya ağ bağlantısı gerektiren harici cihazlarla olan etkileşimler.

Alternatifler

Uygulamanızın harici bir cihaza sürekli veri aktarması gerekiyorsa bunun yerine companion device manager'ı kullanabilirsiniz. Tamamlayıcı cihaz kapsam içindeyken uygulamanızın çalışmaya devam etmesine yardımcı olmak için tamamlayıcı cihaz varlığı API'sini kullanın.

Uygulamanızın Bluetooth cihazları taraması gerekiyorsa bunun yerine Bluetooth tarama API'sini kullanabilirsiniz.

Veri senkronizasyonu

Manifest dosyasında beyan edilecek ön plan hizmet türü:
android:foregroundServiceType
dataSync
Manifest dosyanızda beyan edilecek izin
FOREGROUND_SERVICE_DATA_SYNC
startForeground() yöntemine iletilecek sabit
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Çalışma zamanı ön koşulları
Yok
Açıklama

Aşağıdakiler gibi veri aktarımı işlemleri:

  • Veri yükleme veya indirme
  • Yedekleme ve geri yükleme işlemleri
  • İçe veya dışa aktarma işlemleri
  • Veri getirme işlemi
  • Yerel dosya işleme
  • Bir cihaz ile bulut arasında ağ üzerinden veri aktarma
Alternatifler

Ayrıntılı bilgi için Veri senkronizasyonu ön plan hizmetlerine alternatifler başlıklı makaleyi inceleyin.

Sağlık

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

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

说明

为健身类别的应用(例如锻炼追踪器)提供支持的所有长时间运行的用例。

Konum

Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceType
location
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_LOCATION
startForeground() işlevine iletilecek sabit değer
FOREGROUND_SERVICE_TYPE_LOCATION
Çalışma zamanı ön koşulları

Kullanıcının konum hizmetlerini etkinleştirmiş olması ve uygulamaya aşağıdaki çalışma zamanında izinlerden en az biri verilmiş olmalıdır:

Açıklama

Navigasyon ve konum paylaşımı gibi konum erişimi gerektiren uzun süreli kullanım alanları.

Alternatifler

Kullanıcı belirli konumlara ulaştığında uygulamanızın tetiklenmesi gerekiyorsa bunun yerine coğrafi çit API'sini kullanabilirsiniz.

Medya

Manifest dosyasında beyan edilecek ön plan hizmet türü:
android:foregroundServiceType
mediaPlayback
Manifest dosyanızda beyan edilecek izin
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground() yöntemine iletilecek sabit
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
Çalışma zamanı ön koşulları
Yok
Açıklama

Ses ve video oynatmaya arka planda devam edin. Android TV'de dijital video kaydı (DVR) işlevini destekleme

Alternatifler

Pencere içinde pencere video gösteriyorsanız pencere içinde pencere modunu kullanın.

Medya işleniyor

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

Medya projeksiyonu

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

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

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

说明

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

替代方案

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

Mikrofon

Manifest dosyasında beyan edilecek ön plan hizmet türü:
android:foregroundServiceType
microphone
Manifest dosyanızda beyan edilecek izin
FOREGROUND_SERVICE_MICROPHONE
startForeground() yöntemine iletilecek sabit
FOREGROUND_SERVICE_TYPE_MICROPHONE
Çalışma zamanı ön koşulları

RECORD_AUDIO çalışma zamanında istenen izni isteyip bu izni almalıdır.

Açıklama

Ses kaydediciler veya iletişim uygulamaları gibi mikrofonla konuşma kaydına arka planda devam edin.

Sesli arama

Manifest dosyasında beyan edilecek ön plan hizmet türü:
android:foregroundServiceType
phoneCall
Manifest dosyanızda beyan edilecek izin
FOREGROUND_SERVICE_PHONE_CALL
startForeground() yöntemine iletilecek sabit
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Çalışma zamanı ön koşulları

Bu koşullardan en az biri doğru olmalıdır:

  • Uygulama, ROLE_DIALER rolü aracılığıyla varsayılan çevirici uygulamasıdır.
Açıklama

ConnectionService API'lerini kullanarak devam eden bir aramayı sürdürme

Alternatifler

Telefon, video veya VoIP aramaları yapmanız gerekiyorsa android.telecom kitaplığını kullanabilirsiniz.

Aramaları filtrelemek için CallScreeningService özelliğini kullanabilirsiniz.

Uzaktan mesajlaşma

Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceType
remoteMessaging
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_REMOTE_MESSAGING
startForeground() işlevine iletilecek sabit değer
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Çalışma zamanı ön koşulları
Yok
Açıklama
Kısa mesajları bir cihazdan diğerine aktarın. Cihaz değiştiren kullanıcıların mesajlaşma görevlerine devam etmesine yardımcı olun.

Kısa servis

要在清单中的以下位置声明的前台服务类型
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 类型声明。不过,该服务仍必须遵守其他声明类型的先决条件。如需了解详情,请参阅前台服务文档。

Özel kullanım

Manifest dosyasında tanımlanacak ön plan hizmet türü
android:foregroundServiceType
specialUse
Manifest'inizde beyan etme izni
FOREGROUND_SERVICE_SPECIAL_USE
startForeground() noktasına ulaşılmasına kalan süre
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
Çalışma zamanı ön koşulları
Yok
Açıklama

Diğer ön plan hizmeti kapsamı dışındaki geçerli ön plan hizmeti kullanım alanlarını kapsar. ön plan hizmet türleri için kullanılır.

FOREGROUND_SERVICE_TYPE_SPECIAL_USE beyana ek olarak, ön plan hizmet türüyle birlikte, geliştiricilerin kullanım alanlarını manifest'ini kullanabilirsiniz. Bunu yapmak için<property> <service> öğesi. Bu değerler ve karşılık gelen kullanım alanları şunlardır: incelenir. Kullanım sağladığınız örnekler serbest biçimli olmalıdır ve bunun için yeterli miktarda incelemecinin specialUse öğesini neden kullanmanız gerektiğini bilmesi için gerekli bilgileri türü.

<service android:name="fooService" android:foregroundServiceType="specialUse">
  <property android:name="android.app.PROPERTY_SPECIAL_USE_FGS_SUBTYPE"
      android:value="explanation_for_special_use"/>
</service>

Sistem tarafından muaf tutuldu

Manifestte bildirilecek ön plan hizmeti türü
android:foregroundServiceType
systemExempted
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_SYSTEM_EXEMPTED
startForeground() için sabit geçiş
FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED
Çalışma zamanı ön koşulları
Hiçbiri
Açıklama

Sistem uygulamaları ve belirli sistem entegrasyonları için ayrılmıştır. Ön plan hizmetlerini kullanmaya devam edebilirsiniz.

Bu türü kullanmak için uygulamanın aşağıdaki ölçütlerden en az birini karşılaması gerekir:

Ön plan hizmet türlerinin kullanımıyla ilgili Google Play politika yaptırımı

Uygulamanız Android 14 veya sonraki sürümleri hedefliyorsa uygulamanızın ön plan hizmet türlerini Play Console'un uygulama içeriği sayfasında (Politika > Uygulama içeriği) belirtmeniz gerekir. Play Console'da ön plan hizmet türlerinizi nasıl beyan edeceğiniz hakkında daha fazla bilgi için Ön plan hizmetini ve tam ekran intent şartlarını anlama başlıklı makaleyi inceleyin.