To help developers be more intentional with defining user-facing foreground
services, Android 10 introduced the android:foregroundServiceType
attribute within the <service> element.
If your app targets Android 14, it must specify appropriate foreground service types. As in previous versions of Android, multiple types can be combined. This list shows the foreground service types to choose from:
cameraconnectedDevicedataSynchealthlocationmediaPlaybackmediaProjectionmicrophonephoneCallremoteMessagingshortServicespecialUsesystemExempted
If a use case in your app isn't associated with any of these types, we strongly recommend that you migrate your logic to use WorkManager or user-initiated data transfer jobs.
The health, remoteMessaging, shortService, specialUse, and systemExempted
types are new in Android 14.
The following code snippet provides an example of a foreground service type declaration in the manifest:
<manifest ...>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
<application ...>
<service
android:name=".MyMediaPlaybackService"
android:foregroundServiceType="mediaPlayback"
android:exported="false">
</service>
</application>
</manifest>
If an app that targets Android 14 doesn't define types for a given service in
the manifest, then the system will raise MissingForegroundServiceTypeException
upon calling startForeground() for that service.
Ön plan hizmeti türlerini kullanmak için yeni izin bildir
If apps that target Android 14 use a foreground service, they must declare a specific permission, based on the foreground service type, that Android 14 introduces. These permissions appear in the sections labeled "permission that you must declare in your manifest file" in the intended use cases and enforcement for each foreground service type section on this page.
All of the permissions are defined as normal permissions and are granted by default. Users cannot revoke these permissions.
Çalışma zamanında ön plan hizmet türünü ekleme
Ön plan hizmetlerini başlatan uygulamalar için en iyi uygulama, ön plan hizmet türlerinin bitsel bir tam sayı değerini ilettiğiniz startForeground() işlevinin ServiceCompat sürümünü (androidx-core 1.12 ve sonraki sürümlerde kullanılabilir) kullanmaktır. Bir veya daha fazla tür değeri iletmeyi seçebilirsiniz.
Genellikle yalnızca belirli bir kullanım alanı için gereken türleri tanımlamanız gerekir. Bu sayede sistemin her ön plan hizmet türüne dair beklentilerini karşılayabilirsiniz. Bir ön plan hizmetinin birden fazla türle başlatıldığı durumlarda, ön plan hizmeti tüm türlerin platform yaptırım koşullarına uymalıdır.
ServiceCompat.startForeground(0, notification, FOREGROUND_SERVICE_TYPE_LOCATION)
Ön plan hizmet türü çağrıda belirtilmezse tür varsayılan olarak manifest'te tanımlanan değerlere ayarlanır. Manifest'te hizmet türünü belirtmediyseniz sistem MissingForegroundServiceTypeException hatası verir.
Ön plan hizmetini başlattıktan sonra yeni izinlere ihtiyacı olursa startForeground() işlevini tekrar çağırıp yeni hizmet türlerini eklemeniz gerekir. Örneğin, bir fitness uygulamasının her zaman location bilgisine ihtiyaç duyan ancak media izinlerine ihtiyaç duyabilecek ya da gerekmeyebilecek bir koşu takip aracı hizmeti çalıştırdığını varsayalım. Manifestte hem location hem de mediaPlayback öğelerini belirtmeniz gerekir. Bir kullanıcı koşuya başlar ve yalnızca konumunun izlenmesini isterse uygulamanız startForeground() işlevini çağırmalı ve yalnızca location hizmet türünü iletmelidir. Ardından, kullanıcı ses oynatmaya başlamak isterse startForeground() işlevini tekrar çağırın ve location|mediaPlayback parametresini iletin.
Sistem çalışma zamanı kontrolleri
The system checks for proper use of foreground service types and confirms that
the app has requested the proper runtime permissions or uses the required APIs.
For instance, the system expects apps that use the foreground service type
FOREGROUND_SERVICE_TYPE_LOCATION type to request either
ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION.
This implies that apps must follow a very specific
order of operations when requesting permissions from the user and starting
foreground services. Permissions must be requested and granted before the
app attempts to call startForeground(). Apps that request the appropriate
permissions after the foreground service has been started must change this order
of operations and request the permission before starting the foreground service.
The specifics of platform enforcement appear in the sections labeled "runtime requirements" in the intended use cases and enforcement for each foreground service type section on this page.
Her ön plan hizmet türü için amaçlanan kullanım alanları ve yaptırım
Belirli bir ön plan hizmet türünü kullanmak için manifest dosyanızda belirli bir izni beyan etmeniz, belirli çalışma zamanı koşullarını karşılamanız ve uygulamanızın, söz konusu tür için amaçlanan kullanım alanı gruplarından birini karşılaması gerekir. Aşağıdaki bölümlerde, beyan etmeniz gereken izin, çalışma zamanı ön koşulları ve her türün amaçlanan kullanım alanları açıklanmaktadır.
Kamera
android:foregroundServiceTypealtında manifest'de beyan edilecek ön plan hizmet türücamera- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_CAMERAstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_CAMERA- Çalışma zamanı ön koşulları
CAMERAçalışma zamanı iznini isteyip alınNot:
CAMERAçalışma zamanı izni, kullanım sırasındaki kısıtlamalara tabidir. Bu nedenle, birkaç istisna dışında uygulamanız arka plandaykencameraön plan hizmeti oluşturamazsınız. Daha fazla bilgi için Kullanımdayken izin gerektiren ön plan hizmetlerini başlatmayla ilgili kısıtlamalar başlıklı makaleyi inceleyin.- Açıklama
Çoklu görev gerçekleştirmeye izin veren görüntülü sohbet uygulamaları gibi kameraya arka planda erişmeye devam edin.
Bağlı cihaz
- 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.
Veri senkronizasyonu
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypedataSync- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_DATA_SYNCstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_DATA_SYNC- Çalışma zamanı ön koşulları
- Yok
- Açıklama
Aşağıdakiler gibi veri aktarma 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
Ayrıntılı bilgi için Veri senkronizasyonu ön plan hizmetlerine alternatifler başlıklı makaleyi inceleyin.
Sağlık
- Foreground service type to declare in manifest under
android:foregroundServiceTypehealth- Permission to declare in your manifest
FOREGROUND_SERVICE_HEALTH- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_HEALTH- Runtime prerequisites
At least one of the following conditions must be true:
Declare the
HIGH_SAMPLING_RATE_SENSORSpermission in your manifest.Request and be granted at least one of the following runtime permissions:
BODY_SENSORSon API level 35 and lowerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
Note: The
BODY_SENSORSand sensor-based READ runtime permissions are subject to while-in-use restrictions. For this reason, you cannot create ahealthforeground service that uses body sensors while your app is in the background unless you've been granted theBODY_SENSORS_BACKGROUND(API level 33 to 35) orREAD_HEALTH_DATA_IN_BACKGROUND(API level 36 and higher) permissions. For more information, see Restrictions on starting foreground services that need while-in-use permissions.- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
Konum
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypelocation- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_LOCATIONstartForeground()işlevine iletilecek sabit değerFOREGROUND_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 istenen izinlerden en az biri verilmiş olmalıdır:
Not: Kullanıcının konum hizmetlerini etkinleştirip etkinleştirmediğini ve çalışma zamanında izinlere erişim izni verip vermediğini kontrol etmek için
PermissionChecker#checkSelfPermission()Not: Çalışma zamanı konum izinleri, kullanım sırasındaki kısıtlamalara tabidir. Bu nedenle,
ACCESS_BACKGROUND_LOCATIONçalışma zamanında izin verilmedikçe uygulamanız arka plandaykenlocationön plan hizmeti oluşturamazsınız. Daha fazla bilgi için Kullanımdayken izin gerektiren ön plan hizmetlerini başlatmayla ilgili kısıtlamalar başlıklı makaleyi inceleyin.- 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:foregroundServiceTypemediaPlayback- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_MEDIA_PLAYBACKstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Çalışma zamanı ön koşulları
- Yok
- Açıklama
- Ses veya video oynatmaya arka planda devam edin. Android TV'de Dijital Video Kaydı (DVR) işlevini destekleyin.
- Alternatifler
- Pencere içinde pencere modunda video gösteriyorsanız Pencere içinde pencere modunu kullanın.
Medya projeksiyonu
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypemediaProjection- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_MEDIA_PROJECTIONstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Çalışma zamanı ön koşulları
Ön plan hizmetini başlatmadan önce
createScreenCaptureIntent()yöntemini çağırın. 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()işlevini çağırabilirsiniz.- Açıklama
MediaProjectionAPI'lerini kullanarak içeriği birincil olmayan ekrana veya harici cihaza yansıtın. Bu içeriğin 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 aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypemicrophone- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_MICROPHONEstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_MICROPHONE- Çalışma zamanı ön koşulları
RECORD_AUDIOçalışma zamanı iznini isteyin ve izni alın.Not:
RECORD_AUDIOçalışma zamanı izni, kullanım sırasındaki kısıtlamalara tabidir. Bu nedenle, birkaç istisna dışında uygulamanız arka plandaykenmicrophoneön plan hizmeti oluşturamazsınız. Daha fazla bilgi için Kullanımdayken izin gerektiren ön plan hizmetlerini başlatmayla ilgili kısıtlamalar başlıklı makaleyi inceleyin.- Açıklama
Ses kaydediciler veya iletişim uygulamaları gibi mikrofon kayıtlarına arka planda devam edin.
Sesli arama
- 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.
Uzaktan mesajlaşma
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTyperemoteMessaging- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_REMOTE_MESSAGINGstartForeground()işlevine iletilecek sabit değerFOREGROUND_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
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypeshortService- Manifest dosyanızda beyan etme izni
- Yok
startForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_SHORT_SERVICE- Çalışma zamanı ön koşulları
- Yok
- Açıklama
Kesintiye uğratılamayan veya ertelenemeyecek kritik işleri hızlıca tamamlayın.
Bu türün bazı benzersiz özellikleri vardır:
- Yalnızca kısa bir süre (yaklaşık 3 dakika) çalışabilir.
- Yapışkan ön plan hizmetleri desteklenmez.
- Diğer ön plan hizmetleri başlatılamaz.
- Türe özgü izin gerektirmez ancak
FOREGROUND_SERVICEiznini gerektirir. shortServiceyalnızca uygulama şu anda yeni bir ön plan hizmeti başlatmaya uygunsa başka bir hizmet türüne geçirilebilir.- Ön plan hizmetleri, türlerini istedikleri zaman
shortServiceolarak değiştirebilir. Bu durumda zaman aşımı süresi başlar.
shortService için zaman aşımı,
Service.startForeground()çağrıldığı andan itibaren başlar. Uygulamanın, zaman aşımı gerçekleşmeden önceService.stopSelf()veyaService.stopForeground()çağrısını yapması beklenir. Aksi takdirde yeniService.onTimeout()çağrılır ve uygulamalara, hizmetlerini durdurmak içinstopSelf()veyastopForeground()'yi aramak üzere kısa bir fırsat verilir.Service.onTimeout()çağrıldıktan kısa bir süre sonra uygulama önbelleğe alınmış bir duruma girer ve kullanıcı uygulamayla etkin bir şekilde etkileşimde bulunmadığı sürece artık ön planda olduğu kabul edilmez. Uygulama önbelleğe alındıktan ve hizmet durdurulmadıktan kısa bir süre sonra ANR alır. ANR mesajındaFOREGROUND_SERVICE_TYPE_SHORT_SERVICEgeçiyor. Bu nedenlerden dolayı,Service.onTimeout()geri çağırma işlevini uygulamak en iyi uygulama olarak kabul edilir.Service.onTimeout()geri arama işlevi Android 13 ve önceki sürümlerde mevcut değildir. Aynı hizmet bu tür cihazlarda çalışıyorsa zaman aşımı veya ANR almaz. İşleme görevini tamamlar tamamlamaz, henüzService.onTimeout()geri çağırma almamış olsa bile hizmetinizin durmasını sağlayın.shortServicezaman aşımına uyulmaması durumunda, geçerli başka ön plan hizmetleri veya çalışan başka uygulama yaşam döngüsü süreçleri olsa bile uygulamanın ANR'ye neden olacağını unutmayın.Bir uygulama kullanıcı tarafından görülebilirse veya ön plan hizmetlerinin arka plandan başlatılmasına izin veren istisnalardan birini karşılıyorsa
Service.StartForeground()işleviFOREGROUND_SERVICE_TYPE_SHORT_SERVICEparametresiyle tekrar çağrılırsa zaman aşımı 3 dakika daha uzatılır. Uygulama kullanıcı tarafından görülmüyorsa ve istisnalardan birini karşılamıyorsa türünden bağımsız olarak başka bir ön plan hizmeti başlatma girişimiForegroundServiceStartNotAllowedException'a neden olur.Bir kullanıcı uygulamanız için pil optimizasyonunu devre dışı bırakırsa uygulamanız shortService FGS zaman aşımından etkilenmeye devam eder.
shortServicetürünü ve başka bir ön plan hizmet türünü içeren bir ön plan hizmeti başlatırsanız sistem,shortServicetürü bildirimini yoksayar. Ancak hizmet, beyan edilen diğer türlerin ön koşullarına uymaya devam etmelidir. Daha fazla bilgi için Ön plan hizmetleri belgelerine bakın.
Özel kullanım
- Foreground service type to declare in manifest under
android:foregroundServiceTypespecialUse- Permission to declare in your manifest
FOREGROUND_SERVICE_SPECIAL_USE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SPECIAL_USE- Runtime prerequisites
- None
- Description
Covers any valid foreground service use cases that aren't covered by the other foreground service types.
In addition to declaring the
FOREGROUND_SERVICE_TYPE_SPECIAL_USEforeground service type, developers should declare use cases in the manifest. To do so, they specify the<property>element within the<service>element. These values and corresponding use cases are reviewed when you submit your app in the Google Play Console. The use cases you provide are free-form, and you should make sure to provide enough information to let the reviewer see why you need to use thespecialUsetype.<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
- Manifest dosyasında aşağıdaki altında beyan edilecek ön plan hizmet türü
android:foregroundServiceTypesystemExempted- Manifest dosyanızda beyan etme izni
FOREGROUND_SERVICE_SYSTEM_EXEMPTEDstartForeground()işlevine iletilecek sabit değerFOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Çalışma zamanı ön koşulları
- Yok
- Açıklama
Ön plan hizmetlerini kullanmaya devam etmek için sistem uygulamaları ve belirli sistem entegrasyonları için ayrılmıştır.
Bu türü kullanmak isteyen uygulamaların aşağıdaki ölçütlerden en az birini karşılaması gerekir:
- Cihaz demo modunda
- Uygulama, cihaz sahibidir.
- Uygulama, Profil Oluşturucu Sahibi
ROLE_EMERGENCYrolüne sahip güvenlik uygulamaları- Cihaz Yöneticisi uygulamaları
SCHEDULE_EXACT_ALARMveyaUSE_EXACT_ALARMiznine sahip olan ve yalnızca dokunma alarmları da dahil olmak üzere alarmları arka planda devam ettirmek için ön plan hizmetini kullanan uygulamalar.VPN uygulamaları (Ayarlar > Ağ ve İnternet > VPN kullanılarak yapılandırılır)
Aksi takdirde, bu türün tanımlanması sistemin
ForegroundServiceTypeNotAllowedExceptionhatası vermesine neden olur.
Ö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.