A partire da Android 14 (livello API 34), devi dichiarare un tipo di servizio appropriato per ogni servizio in primo piano. Ciò significa che devi dichiarare il tipo di servizio nel manifest dell'app e devi anche richiedere l'autorizzazione per il servizio in primo piano appropriata per quel tipo (oltre a richiedere l'autorizzazione FOREGROUND_SERVICE). Inoltre, a seconda del tipo di servizio in primo piano, potresti
dover richiedere le autorizzazioni di runtime prima di avviarlo.
Fotocamera
- Foreground service type to declare in manifest under
android:foregroundServiceType camera- Permission to declare in your manifest
FOREGROUND_SERVICE_CAMERA- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_CAMERA- Runtime prerequisites
Request and be granted the
CAMERAruntime permission- Description
Continue to access the camera from the background, such as video chat apps that allow for multitasking.
Dispositivo connesso
- Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceTypeconnectedDevice- Autorizzazione da dichiarare nel file manifest
FOREGROUND_SERVICE_CONNECTED_DEVICE- Costante da passare a
startForeground() FOREGROUND_SERVICE_TYPE_CONNECTED_DEVICE- Prerequisiti di runtime
Deve essere vera almeno una delle seguenti condizioni:
Dichiara almeno una delle seguenti autorizzazioni nel file manifest:
Richiedi e ottieni almeno una delle seguenti autorizzazioni di runtime:
- Descrizione
Interazioni con dispositivi esterni che richiedono Bluetooth, NFC, IR, USB o una connessione di rete.
- Alternative
Se la tua app deve eseguire il trasferimento continuo di dati su un dispositivo esterno, puoi utilizzare il gestore dei dispositivi complementari. Utilizza l'API di presenza del dispositivo complementare per consentire alla tua app di continuare a funzionare mentre il dispositivo complementare è in portata.
Se la tua app deve cercare dispositivi Bluetooth, ti consigliamo di utilizzare l'API di ricerca Bluetooth.
Sincronizzazione dati
- Foreground service type to declare in manifest under
android:foregroundServiceTypedataSync- Permission to declare in your manifest
FOREGROUND_SERVICE_DATA_SYNC- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_DATA_SYNC- Runtime prerequisites
- None
- Description
Data transfer operations, such as the following:
- Data upload or download
- Backup-and-restore operations
- Import or export operations
- Fetch data
- Local file processing
- Transfer data between a device and the cloud over a network
- Alternatives
See Alternatives to data sync foreground services for detailed information.
Salute
- 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 35 and lowerREAD_HEART_RATEREAD_SKIN_TEMPERATUREREAD_OXYGEN_SATURATIONACTIVITY_RECOGNITION
- Description
Any long-running use cases to support apps in the fitness category such as exercise trackers.
Posizione
- Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceTypelocation- Autorizzazione da dichiarare nel file manifest
FOREGROUND_SERVICE_LOCATION- Costante da passare a
startForeground() FOREGROUND_SERVICE_TYPE_LOCATION- Prerequisiti di runtime
L'utente deve aver attivato i servizi di geolocalizzazione e all'app deve essere stata concessa almeno una delle seguenti autorizzazioni di runtime:
- Descrizione
Casi d'uso di lunga durata che richiedono l'accesso alla posizione, come la navigazione e la condivisione della posizione.
- Alternative
Se la tua app deve essere attivata quando l'utente raggiunge posizioni specifiche, consigliamo di utilizzare l'API geofence.
Contenuti multimediali
- Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceTypemediaPlayback- Autorizzazione da dichiarare nel manifest
FOREGROUND_SERVICE_MEDIA_PLAYBACK- Costante da passare a
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK- Prerequisiti di runtime
- Nessuno
- Descrizione
Continua la riproduzione audio o video in background. Supporta la funzionalità di registrazione video digitale (DVR) su Android TV.
- Alternative
Se mostri un video in modalità picture in picture, utilizza la modalità Picture in picture.
Elaborazione contenuti multimediali in corso
- Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceTypemediaProcessing- Autorizzazione da dichiarare nel file manifest
FOREGROUND_SERVICE_MEDIA_PROCESSING- Costante da passare a
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROCESSING- Prerequisiti di runtime
- Nessuna
- Descrizione
Servizio per eseguire operazioni che richiedono molto tempo sugli asset multimediali, come la conversione dei contenuti multimediali in diversi formati. Il sistema consente a questo servizio un tempo di esecuzione limitato. In circostanze normali, questo limite di tempo è di 6 ore su 24. Questo limite è condiviso da tutti i
mediaProcessingservizi in primo piano di un'app.L'app deve interrompere manualmente il servizio di elaborazione dei contenuti multimediali nel seguente scenario:
- Quando l'operazione di transcodifica termina o raggiunge uno stato di errore, chiedi al servizio di chiamare
Service.stopForeground()eService.stopSelf()per interromperlo completamente.
- Quando l'operazione di transcodifica termina o raggiunge uno stato di errore, chiedi al servizio di chiamare
Se viene raggiunto il periodo di timeout, il sistema chiama il metodo
Service.onTimeout(int, int)del servizio. A questo momento, il servizio ha alcuni secondi per chiamareService.stopSelf(). Se il servizio non chiamaService.stopSelf(), si verificherà un ANR con il seguente messaggio di errore: "Un servizio in primo piano di <fgs_type> non si è interrotto entro il suo timeout: <component_name>".Nota:
Service.onTimeout(int, int)non è disponibile su Android 14 o versioni precedenti. Sui dispositivi che eseguono queste versioni, se un servizio di elaborazione dei contenuti multimediali raggiunge il periodo di timeout, il sistema memorizza immediatamente l'app nella cache. Per questo motivo, l'app non deve attendere di ricevere una notifica di timeout. Dovrebbe invece terminare il servizio in primo piano o cambiarlo in un servizio in background, se opportuno.
Proiezione di contenuti multimediali
- Foreground service type to declare in manifest under
android:foregroundServiceTypemediaProjection- Permission to declare in your manifest
FOREGROUND_SERVICE_MEDIA_PROJECTION- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MEDIA_PROJECTION- Runtime prerequisites
Call the
createScreenCaptureIntent()method before starting the foreground service. Doing so shows a permission notification to the user; the user must grant the permission before you can create the service.After you have created the foreground service, you can call
MediaProjectionManager.getMediaProjection().- Description
Project content to non-primary display or external device using the
MediaProjectionAPIs. This content doesn't have to be exclusively media content.- Alternatives
To stream media to another device, use the Google Cast SDK.
Microfono
- Foreground service type to declare in manifest under
android:foregroundServiceTypemicrophone- Permission to declare in your manifest
FOREGROUND_SERVICE_MICROPHONE- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_MICROPHONE- Runtime prerequisites
Request and be granted the
RECORD_AUDIOruntime permission.- Description
Continue microphone capture from the background, such as voice recorders or communication apps.
Telefonata
- 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.
Messaggistica remota
- Foreground service type to declare in manifest under
android:foregroundServiceTyperemoteMessaging- Permission to declare in your manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING- Runtime prerequisites
- None
- Description
- Transfer text messages from one device to another. Assists with continuity of a user's messaging tasks when they switch devices.
Servizio breve
- Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceTypeshortService- Autorizzazione da dichiarare nel file manifest
- Nessuna
- Costante da passare a
startForeground() FOREGROUND_SERVICE_TYPE_SHORT_SERVICE- Prerequisiti di runtime
- Nessuna
- Descrizione
Completare rapidamente i lavori critici che non possono essere interrotti o posticipati.
Questo tipo ha alcune caratteristiche uniche:
- Può essere eseguito solo per un breve periodo di tempo (circa 3 minuti).
- Nessun supporto per i servizi in primo piano permanenti.
- Impossibile avviare altri servizi in primo piano.
- Non richiede un'autorizzazione specifica per tipo, ma richiede comunque l'autorizzazione
FOREGROUND_SERVICE. - Un
shortServicepuò passare a un altro tipo di servizio solo se l'app è attualmente idonea a avviare un nuovo servizio in primo piano. - Un servizio in primo piano può modificare il proprio tipo in
shortServicein qualsiasi momento, a quel punto inizia il periodo di timeout.
Il timeout per shortService inizia dal momento in cui viene chiamato
Service.startForeground(). L'app deve chiamareService.stopSelf()oService.stopForeground()prima che si verifichi il timeout. In caso contrario, viene chiamato il nuovoService.onTimeout(), offrendo alle app una breve opportunità di chiamarestopSelf()ostopForeground()per interrompere il servizio.Poco dopo la chiamata a
Service.onTimeout(), l'app entra in uno stato memorizzato nella cache e non è più considerata in primo piano, a meno che l'utente non interagisca attivamente con l'app. Poco dopo che l'app è stata memorizzata nella cache e il servizio non è stato interrotto, l'app riceve un ANR. Il messaggio ANR menzionaFOREGROUND_SERVICE_TYPE_SHORT_SERVICE. Per questi motivi, è considerata una best practice implementare il callbackService.onTimeout().Il richiamata
Service.onTimeout()non esiste su Android 13 e versioni precedenti. Se lo stesso servizio viene eseguito su questi dispositivi, non riceve un timeout né un ANR. Assicurati che il servizio si fermi non appena completa l'attività di elaborazione, anche se non ha ancora ricevuto ilService.onTimeout()callback.È importante notare che se il timeout di
shortServicenon viene rispettato, l'app genera un ANR anche se sono in esecuzione altri servizi in primo piano validi o altri processi del ciclo di vita dell'app.Se un'app è visibile all'utente o soddisfa una delle esenzioni che consentono l'avvio dei servizi in primo piano dal background, la chiamata
Service.StartForeground()di nuovo con il parametroFOREGROUND_SERVICE_TYPE_SHORT_SERVICEprolunga il timeout di altri 3 minuti. Se l'app non è visibile all'utente e non soddisfa una delle esenzioni, qualsiasi tentativo di avviare un altro servizio in primo piano, indipendentemente dal tipo, genera unForegroundServiceStartNotAllowedException.Se un utente disattiva l'ottimizzazione batteria per la tua app, quest'ultima è comunque interessata dal timeout di shortService FGS.
Se avvii un servizio in primo piano che include il tipo
shortServicee un altro tipo di servizio in primo piano, il sistema ignora la dichiarazione del tiposhortService. Tuttavia, il servizio deve comunque rispettare i prerequisiti degli altri tipi dichiarati. Per ulteriori informazioni, consulta la documentazione relativa ai servizi in primo piano.
Uso speciale
- 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>
Esenzione dal sistema
- Foreground service type to declare in manifest under
android:foregroundServiceTypesystemExempted- Permission to declare in your manifest
FOREGROUND_SERVICE_SYSTEM_EXEMPTED- Constant to pass to
startForeground() FOREGROUND_SERVICE_TYPE_SYSTEM_EXEMPTED- Runtime prerequisites
- None
- Description
Reserved for system applications and specific system integrations, to continue to use foreground services.
To use this type, an app must meet at least one of the following criteria:
- Device is in demo mode state
- App is a Device Owner
- App is a Profiler Owner
- Safety Apps that have the
ROLE_EMERGENCYrole - Device Admin apps
- Apps holding
SCHEDULE_EXACT_ALARMorUSE_EXACT_ALARMpermission VPN apps (configured using Settings > Network & Internet > VPN)
Otherwise, declaring this type causes the system to throw a
ForegroundServiceTypeNotAllowedException.
Applicazione delle norme di Google Play per l'utilizzo dei tipi di servizi in primo piano
If your app targets Android 14 or higher, you'll need to declare your app's foreground service types in the Play Console's app content page (Policy > App content). For more information on how to declare your foreground service types in Play Console, see Understanding foreground service and full-screen intent requirements.