Ön plan hizmeti türleri

Android 14'ten (API düzeyi 34) itibaren her ön plan hizmeti için uygun bir hizmet türü belirtmeniz gerekir. Bu nedenle, uygulama manifest dosyanızda hizmet türünü belirtmeniz ve FOREGROUND_SERVICE iznini istemenin yanı sıra bu tür için uygun ön plan hizmet iznini de istemeniz gerekir. Ayrıca, ön plan hizmet türüne bağlı olarak hizmeti başlatmadan önce çalışma zamanında istenen izinleri istemeniz gerekir.

Kamera

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

请求并获得 CAMERA 运行时权限

说明

继续在后台使用摄像头,例如视频聊天应用 支持多任务处理

Bağlı cihaz

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

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

说明

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

替代方案

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

如果您的应用需要扫描蓝牙设备,请考虑改用 Bluetooth Scanner API

Veri senkronizasyonu

Manifest dosyasında tanımlanacak ön plan hizmet türü
android:foregroundServiceType
dataSync
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_DATA_SYNC
startForeground() noktasına ulaşılmasına kalan süre
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
  • Yerel dosya işleme
  • Ağ üzerinden bir cihaz ile bulut arasında veri aktarma
Alternatifler

Veri senkronizasyonu ön plan hizmetlerine alternatifler bölümüne bakın inceleyebilirsiniz.

Sağlık

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

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

Açıklama

Fitness kategorisindeki uygulamaları (ör. egzersiz takipçileri) desteklemek için uzun süredir kullanılan tüm kullanım alanları.

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 aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceType
mediaPlayback
Manifest'inizde beyan etme izni
FOREGROUND_SERVICE_MEDIA_PLAYBACK
startForeground() noktasına ulaşılmasına kalan süre
FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK
Çalışma zamanı ön koşulları
Yok
Açıklama

Ses veya video oynatmaya arka planda devam edin. Dijital Video Desteği Android TV'de kayıt (DVR) işlevi.

Alternatifler

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

Medya işleniyor

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

Medya öğelerini farklı biçimlere dönüştürme gibi medya öğeleri üzerinde zaman alan işlemler gerçekleştirme hizmeti. Sistem bu hizmetin sınırlı bir süre çalışmasına izin verir. Normal koşullarda, bu süre sınırı her 24 saatten 6 saat olabilir. (Bu sınır, bir uygulamanın tüm mediaProcessing ön plan hizmetleri tarafından paylaşılır.)

Uygulamanız, aşağıdaki senaryoda medya işleme hizmetini manuel olarak durdurmalıdır:

Zaman aşımı süresine ulaşılırsa sistem, hizmetin Service.onTimeout(int, int) yöntemini çağırır. Şu anda hizmetin Service.stopSelf()'i çağırması için birkaç saniyesi vardır. Hizmet Service.stopSelf() yöntemini çağırmıyorsa şu hata mesajıyla birlikte bir ANR oluşur: "<fgs_type> için ön plan hizmeti, zaman aşımı süresi içinde durmadı: <component_name>".

Not: Service.onTimeout(int, int), Android 14 veya önceki sürümlerde kullanılamaz. Bu sürümleri çalıştıran cihazlarda, bir medya işleme hizmeti zaman aşımı süresine ulaşırsa sistem, uygulamayı hemen önbelleğe alır. Bu nedenle, uygulamanız zaman aşımı bildirimi almak için beklememelidir. Bunun yerine, uygun olan en kısa sürede ön plan hizmetini sonlandırmalı veya bir arka plan hizmetine değiştirmelidir.

Medya projeksiyonu

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

Başlamadan önce createScreenCaptureIntent() yöntemini çağırın ön plan hizmetini kullanabilirsiniz. Bu işlem, kullanıcıya bir izin bildirimi gösterir. Hizmeti oluşturabilmeniz için kullanıcının izin vermesi gerekir.

Ön plan hizmetini oluşturduktan sonra MediaProjectionManager.getMediaProjection().

Açıklama

Şunu kullanarak içeriği birincil olmayan ekrana veya harici cihaza yansıtın: MediaProjection API'ler. Bu içeriklerin yalnızca medya içeriği olması gerekmez.

Alternatifler

Medyayı başka bir cihaza aktarmak için Google Cast SDK'sını kullanın.

Mikrofon

Manifest dosyasında tanımlanacak ön plan hizmet türü
android:foregroundServiceType
microphone
Manifest'inizde beyan etme izni
FOREGROUND_SERVICE_MICROPHONE
startForeground() işlevine iletilecek sabit değer
FOREGROUND_SERVICE_TYPE_MICROPHONE
Çalışma zamanı ön koşulları

RECORD_AUDIO çalışma zamanı iznini isteyin ve izni alın.

Açıklama

Ses kaydediciler veya iletişim uygulamaları gibi mikrofon kayıtlarına arka planda devam edin.

Sesli arama

Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceType
phoneCall
Manifest'inizde beyan etme izni
FOREGROUND_SERVICE_PHONE_CALL
startForeground() noktasına ulaşılmasına kalan süre
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Çalışma zamanı ön koşulları

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

  • Uygulama, manifest dosyasında MANAGE_OWN_CALLS iznini beyan etti. dosyası olarak kaydedebilirsiniz.
  • Uygulama, ROLE_DIALER rolü aracılığıyla varsayılan çevirici uygulamasıdır.
ziyaret edin.
Açıklama

ConnectionService API'lerini kullanarak devam eden bir görüşmeye devam edin.

Alternatifler

Telefon, görüntülü görüşme veya VoIP araması yapmanız gerekiyorsa android.telecom kitaplığını kullanabilirsiniz.

Aramaları filtrelemek için CallScreeningService kullanabilirsiniz.

Uzaktan mesajlaşma

Manifestte bildirilecek ön plan hizmeti türü
android:foregroundServiceType
remoteMessaging
Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_REMOTE_MESSAGING
startForeground() için sabit geçiş
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Çalışma zamanı ön koşulları
Hiçbiri
Açıklama
Kısa mesajları bir cihazdan diğerine aktarın. Cihaz değiştirdiğinde kullanıcıların mesajlaşma görevlerinin devam etmesine yardımcı olur.

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 belgeler 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 muaf

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

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

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

Ö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.