<servizio>

sintassi:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:foregroundServiceType=["camera" | "connectedDevice" |
                                        "dataSync" | "health" | "location" |
                                        "mediaPlayback" | "mediaProjection" |
                                        "microphone" | "phoneCall" |
                                        "remoteMessaging" | "shortService" |
                                        "specialUse" | "systemExempted"]
         android:icon="drawable resource"
         android:intentMatchingFlags=["none" | "enforceIntentFilter" | "allowNullAction"]
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string"
         android:stopWithTask=["true" | "false"]>
    ...
</service>
contenuto in:
<application>
può contenere:
<intent-filter>
<meta-data>
<property>
description:
Dichiara un servizio, una sottoclasse Service, come uno dei componenti dell'applicazione. A differenza delle attività, i servizi non hanno un'interfaccia utente visiva. Vengono utilizzati per implementare operazioni in background a lunga esecuzione o un'API di comunicazione avanzata che può essere chiamata da altre applicazioni.

Tutti i servizi devono essere rappresentati da <service> elementi in il file manifest. Quelli non dichiarati non vengono visualizzati dal sistema e non vengono mai eseguiti.

Nota: su Android 8.0 (livello API 26) e versioni successive, il sistema limita le azioni che la tua app può eseguire in background. Per ulteriori informazioni, consulta le guide che trattano i limiti di esecuzione in background e i limiti di localizzazione in background.

attributi:
android:description
Una stringa leggibile dall'utente che descrive il servizio. La descrizione viene impostata come a riferimento a una risorsa stringa, in modo che possa essere localizzata come altre stringhe nell'interfaccia utente.
android:directBootAware

Indica se il servizio è compatibile con l'avvio diretto, ovvero se può essere eseguito prima che l'utente sblocchi il dispositivo.

Nota: durante l'avvio diretto, un servizio nella tua applicazione può accedere solo ai dati archiviati nello spazio di archiviazione protetto dal dispositivo.

Il valore predefinito è "false".

android:enabled
Indica se il sistema può creare un'istanza del servizio. È "true" se può farlo e "false" in caso contrario. Il valore predefinito è "true".

L'elemento <application> ha il proprio enabled attributo che si applica a tutti i componenti dell'applicazione, inclusi i servizi. Affinché il servizio sia abilitato, gli attributi <application> e <service> devono essere entrambi "true", come lo sono per impostazione predefinita. Se uno dei due è "false", il servizio è disabilitato e non può essere creato.

android:exported
Indica se i componenti di altre applicazioni possono richiamare il servizio o interagire con esso. È "true" se possono farlo e "false" in caso contrario. Quando il valore è "false", solo i componenti della stessa applicazione o delle applicazioni con lo stesso ID utente possono avviare il servizio o associarlo.

Il valore predefinito dipende dal fatto che il servizio contenga filtri di intent. L'assenza di filtri significa che può essere richiamato solo specificando il nome della classe esatto. Ciò implica che il servizio è destinato solo all'uso interno dell'applicazione, poiché altri non conoscono il nome della classe. In questo caso, il valore predefinito è "false". D'altra parte, la presenza di almeno un filtro implica che il servizio è destinato all'uso esterno, quindi il valore predefinito è "true".

Questo attributo non è l'unico modo per limitare l'esposizione di un servizio ad altre applicazioni. Puoi anche utilizzare un'autorizzazione per limitare le entità esterne che possono interagire con il servizio. Consulta l'attributo permission.

android:foregroundServiceType

Specifica che il servizio è un servizio in primo piano che soddisfa un caso d'uso specifico. Ad esempio, un tipo di servizio in primo piano "location" indica che un'app sta recuperando la posizione attuale del dispositivo, in genere per continuare un'azione avviata dall'utente correlata alla posizione del dispositivo.

Puoi assegnare più tipi di servizi in primo piano a un determinato servizio.

android:icon

Un'icona che rappresenta il servizio. Questo attributo viene impostato come riferimento a una risorsa disegnabile contenente la definizione dell'immagine. Se non è impostato, viene utilizzata l'icona specificata per l'applicazione nel suo complesso. Consulta l'attributo icon dell'elemento <application>.

L'icona del servizio, sia che sia impostata qui sia dall'elemento <application>, è anche l'icona predefinita per tutti i filtri di intent del servizio. Consulta l'attributo icon dell'elemento <intent-filter>.

android:intentMatchingFlags

Utilizza questo attributo per ottimizzare il modo in cui il sistema associa gli intent in entrata ai componenti dell'app componenti. Per impostazione predefinita, non vengono applicate regole di corrispondenza speciali.

Il valore impostato su un tag <service> sostituisce il valore impostato sul tag <application>.

Il valore deve essere uno o più dei seguenti flag, separati da "|":

Flag Descrizione
none Disabilita tutte le regole di corrispondenza speciali per gli intent in entrata. Quando specificando più flag, i valori in conflitto vengono risolti dando la precedenza al flag none.
enforceIntentFilter

Applica una corrispondenza più rigorosa per gli intent in entrata:

  • Gli intent espliciti devono corrispondere al filtro di intent del componente di destinazione.
  • Gli intent senza un'azione non corrispondono a nessun filtro di intent.
allowNullAction

Rilassa le regole di corrispondenza per consentire la corrispondenza degli intent senza un'azione. Questo flag viene utilizzato insieme a enforceIntentFilter per ottenere il seguente comportamento:

  • Gli intent espliciti devono corrispondere al filtro di intent del componente di destinazione.
  • Gli intent senza un'azione possono corrispondere a qualsiasi filtro di intent.

Per ulteriori informazioni, consulta la sezione Intent più sicuri in Modifiche al comportamento di Android 16 (livello API 36).

android:isolatedProcess
Se impostato su "true", questo servizio viene eseguito in un processo speciale isolato dal resto del sistema e non ha autorizzazioni proprie. L'unica comunicazione con il servizio avviene tramite l'API Service, con associazione e avvio.
android:label
Un nome leggibile dall'utente per il servizio. Se questo attributo non è impostato, viene utilizzata l'etichetta impostata per l'applicazione nel suo complesso. Consulta l'attributo label dell'elemento <application>.

L'etichetta del servizio, sia che sia impostata qui sia dall'elemento <application> è anche l' etichetta predefinita per tutti i filtri di intent del servizio. Consulta l'attributo label dell'elemento <intent-filter>.

L'etichetta viene impostata come riferimento a una risorsa stringa, in modo che possa essere localizzata come altre stringhe nell'interfaccia utente. Tuttavia, per comodità durante lo sviluppo dell'applicazione, può essere impostata anche come stringa non elaborata.

android:name
Il nome della sottoclasse Service che implementa il servizio. Si tratta di un nome di classe completo, ad esempio "com.example.project.RoomService". Tuttavia, come abbreviazione, se il primo carattere del nome è un punto, ad esempio ".RoomService", viene aggiunto al nome del pacchetto specificato nell' <manifest> elemento.

Una volta pubblicata l'applicazione, non modificare questo nome, a meno che non imposti android:exported="false".

Non esiste un valore predefinito. Il nome deve essere specificato.

android:permission
Il nome di un'autorizzazione di cui un'entità ha bisogno per avviare il servizio o associarlo. Se a un chiamante di startService(), bindService() o stopService() non viene concessa questa autorizzazione, il metodo non funziona e l'oggetto Intent non viene recapitato al servizio.

Se questo attributo non è impostato, al servizio si applica l'autorizzazione impostata dall'attributo permission dell'elemento <application>. Se nessuno dei due attributi è impostato, il servizio non è protetto da un'autorizzazione.

Per ulteriori informazioni sulle autorizzazioni, consulta la sezione Autorizzazioni nella panoramica del manifest dell'app e le Linee guida per la sicurezza.

android:process
Il nome del processo in cui viene eseguito il servizio. In genere, tutti i componenti di un'applicazione vengono eseguiti nel processo predefinito creato per l'applicazione. Ha lo stesso nome del pacchetto dell'applicazione. L' <application>attributo dell'elemento process può impostare un valore predefinito diverso per tutti i componenti. Tuttavia, un componente può sostituire il valore predefinito con il proprio attributo process, consentendoti di distribuire l'applicazione su più processi.

Se il nome assegnato a questo attributo inizia con i due punti (:), viene creato un nuovo processo, privato per l'applicazione, quando è necessario e il servizio viene eseguito in quel processo.

Se il nome del processo inizia con un carattere minuscolo, il servizio viene eseguito in un processo globale con quel nome, a condizione che abbia l'autorizzazione per farlo. In questo modo, i componenti di applicazioni diverse possono condividere un processo, riducendo l'utilizzo delle risorse.

android:stopWithTask
Se impostato su "true", il sistema arresta automaticamente il servizio quando l'utente rimuove un'attività basata su un'attività di proprietà dell'app. Il valore predefinito è "false".
vedi anche:
<application>
<activity>
introdotta in:
Livello API 1