Tipi di servizi in primo piano

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

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

请求并获得 CAMERA 运行时权限

说明

继续在后台访问相机,例如支持多任务的视频聊天应用。

Dispositivo connesso

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
connectedDevice
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:

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

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
dataSync
Autorizzazione da dichiarare nel manifest
FOREGROUND_SERVICE_DATA_SYNC
Costante da passare a startForeground()
FOREGROUND_SERVICE_TYPE_DATA_SYNC
Prerequisiti di runtime
Nessuno
Descrizione

Operazioni di trasferimento dei dati, ad esempio:

  • Caricamento o download dei dati
  • Operazioni di backup e ripristino
  • Operazioni di importazione o esportazione
  • Recupera dati
  • Elaborazione dei file locali
  • Trasferire dati tra un dispositivo e il cloud tramite una rete
Alternative

Per informazioni dettagliate, vedi Alternative ai servizi in primo piano di sincronizzazione dei dati.

Salute

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

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

说明

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

Località

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
location
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.

Media

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
mediaPlayback
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 video 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:foregroundServiceType
mediaProcessing
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 mediaProcessing servizi in primo piano di un'app.

L'app deve interrompere manualmente il servizio di elaborazione dei contenuti multimediali nel seguente scenario:

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 chiamare Service.stopSelf(). Se il servizio non chiama Service.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 multimediale

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

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

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

说明

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

替代方案

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

Microfono

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
microphone
Autorizzazione da dichiarare nel manifest
FOREGROUND_SERVICE_MICROPHONE
Costante da passare a startForeground()
FOREGROUND_SERVICE_TYPE_MICROPHONE
Prerequisiti di runtime

Richiedi e ottieni l'autorizzazione di runtime RECORD_AUDIO.

Descrizione

Continua l'acquisizione del microfono in background, ad esempio per registratori vocali o app di comunicazione.

Telefonata

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
phoneCall
Autorizzazione da dichiarare nel manifest
FOREGROUND_SERVICE_PHONE_CALL
Costante da passare a startForeground()
FOREGROUND_SERVICE_TYPE_PHONE_CALL
Prerequisiti di runtime

Deve essere vera almeno una delle seguenti condizioni:

  • L'app è l'app di connessione a internet predefinita tramite il ruolo ROLE_DIALER.
Descrizione

Continuare una chiamata in corso utilizzando le API ConnectionService.

Alternative

Se devi effettuare chiamate telefoniche, videochiamate o chiamate VoIP, valuta la possibilità di utilizzare la libreria android.telecom.

Valuta la possibilità di utilizzare CallScreeningService per filtrare le chiamate.

Messaggistica remota

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
remoteMessaging
Autorizzazione da dichiarare nel file manifest
FOREGROUND_SERVICE_REMOTE_MESSAGING
Costante da passare a startForeground()
FOREGROUND_SERVICE_TYPE_REMOTE_MESSAGING
Prerequisiti di runtime
Nessuna
Descrizione
Trasferisci i messaggi da un dispositivo all'altro. Assiste con la continuità delle attività di messaggistica di un utente quando cambia dispositivo.

Servizio breve

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
shortService
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 shortService può 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 shortService in 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 chiamare Service.stopSelf() o Service.stopForeground() prima che si verifichi il timeout. In caso contrario, viene chiamato il nuovo Service.onTimeout(), offrendo alle app una breve opportunità di chiamare stopSelf() o stopForeground() 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 menziona FOREGROUND_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 il Service.onTimeout() callback.

È importante notare che se il timeout di shortService non 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 parametro FOREGROUND_SERVICE_TYPE_SHORT_SERVICE prolunga 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 un ForegroundServiceStartNotAllowedException.

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 shortService e un altro tipo di servizio in primo piano, il sistema ignora la dichiarazione del tipo shortService. 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

Tipo di servizio in primo piano da dichiarare nel manifest in
android:foregroundServiceType
specialUse
Autorizzazione da dichiarare nel file manifest
FOREGROUND_SERVICE_SPECIAL_USE
Costante da passare a startForeground()
FOREGROUND_SERVICE_TYPE_SPECIAL_USE
Prerequisiti di runtime
Nessuna
Descrizione

Copre tutti i casi d'uso validi dei servizi in primo piano non coperti dagli altri tipi di servizi in primo piano.

Oltre a dichiarare il FOREGROUND_SERVICE_TYPE_SPECIAL_USE tipo di servizio in primo piano, gli sviluppatori devono dichiarare i casi d'uso nel manifest. A tal fine, specificano l'elemento <property> all'interno dell'elemento <service>. Questi valori e i casi d'uso corrispondenti vengono esaminati quando invii l'app in Google Play Console. I casi d'uso che fornisci sono in formato libero e devi assicurarti di fornire informazioni sufficienti per consentire all'esaminatore di capire perché devi utilizzare il tipo 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>

Esenzione dal sistema

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

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

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

Applicazione delle norme di Google Play per l'utilizzo dei tipi di servizi in primo piano

Se la tua app ha come target Android 14 o versioni successive, devi dichiarare i tipi di servizi in primo piano della tua app nella pagina Contenuti app di Play Console (Norme > Contenuti app). Per ulteriori informazioni su come dichiarare i tipi di servizio in primo piano in Play Console, consulta Informazioni sui requisiti relativi al servizio in primo piano e all'intent a schermo intero.