Intent Filter: cos'è, come funziona e viene utilizzato nello sviluppo

Autore: IT Sectr Pubblicato: 2026-05-14 Tempo di lettura: 8 min

Intent Filter è una dichiarazione in AndroidManifest.xml che indica al sistema quali intention implicite un componente dell'applicazione può gestire. Secondo la Guida per sviluppatori Android, il filtro contiene action, category e data, in base ai quali il sistema instrada le chiamate da altre applicazioni ed eventi di sistema. Lo sviluppo Android utilizza Intent Filter come meccanismo principale di accoppiamento debole tra componenti di diverse applicazioni.

Punti chiave

  • Intent Filter — una dichiarazione XML nel manifest che definisce i tipi di Intent impliciti che un'Activity, un Service o un BroadcastReceiver può gestire.
  • Action specifica l'azione che il componente deve eseguire — ad esempio, ACTION_VIEW per visualizzare dati o ACTION_SEND per inviare contenuti.
  • Category aggiunge una categoria aggiuntiva al componente — BROWSABLE consente chiamate dal browser, DEFAULT è necessario per gli Intent impliciti.
  • Data descrive l'URI, il tipo MIME o lo schema dei dati gestiti, il che è fondamentale per configurare i deep link in un'applicazione.
  • Conflitti quando più applicazioni gestiscono lo stesso Intent vengono risolti da una finestra di dialogo di selezione del sistema o dalle impostazioni predefinite.

Cos'è Intent Filter?

Intent Filter è un elemento di configurazione di un'applicazione Android che informa il sistema sulla capacità del componente di gestire determinati tipi di intention implicite. A differenza degli Intent espliciti che specificano una classe concreta, gli Intent impliciti contengono solo una descrizione dell'azione richiesta, e il sistema stesso trova un componente appropriato in base ai filtri registrati.

I filtri vengono dichiarati all'interno di un componente — Activity, Service o BroadcastReceiver — nel file AndroidManifest.xml. Ogni filtro può contenere più elementi action, category e data. Un componente può avere un numero illimitato di Intent Filter, ciascuno dei quali descrive uno scenario di gestione separato.

Ruolo nell'architettura Android

Intent Filter implementa il principio di accoppiamento debole tra i componenti delle applicazioni. L'applicazione A non deve conoscere l'esistenza dell'applicazione B — invia semplicemente un Intent con la descrizione dell'azione e il sistema lo instrada in base ai filtri. Questo meccanismo è alla base di Share Sheet, della selezione del browser e della gestione dei deep link.

Tipi di Intent: espliciti e impliciti

Gli Intent espliciti specificano una classe di componente concreta da avviare. Vengono utilizzati per la navigazione interna all'interno di una singola applicazione quando lo sviluppatore sa esattamente quale Activity deve aprirsi. Gli Intent impliciti contengono solo una descrizione dell'azione e il componente viene determinato dinamicamente dal sistema.

Intent Filter funziona esclusivamente con Intent impliciti. Se un Intent specifica una classe concreta, il sistema ignora tutti i filtri e avvia direttamente il componente specificato. I filtri vengono verificati solo durante la risoluzione delle chiamate implicite, rendendoli un elemento chiave dell'interazione tra applicazioni.

Confronto tra Intent espliciti e impliciti

CaratteristicaIntent esplicitoIntent implicito
ComponenteSpecificato esplicitamente (className)Determinato dal sistema
Intent FilterNon richiestoRichiesto
EsempiostartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse(”https://example.com”))
SicurezzaMaggiore (nessuna intercettazione)Minore (possibili conflitti)

Struttura di Intent Filter nel manifest

Ogni Intent Filter è composto da tre gruppi di elementi — action, category e data — la cui combinazione determina quali Intent riceverà il componente. Un filtro è considerato soddisfatto se l'Intent corrisponde ad almeno un elemento di ciascun gruppo.

Action descrive l'azione in esecuzione — visualizzare, modificare, inviare. Category aggiunge un contesto di elaborazione aggiuntivo — ad esempio, la possibilità di avviarsi dal browser. Data definisce il formato delle informazioni elaborate tramite URI o tipo MIME.

Componenti del tag intent-filter

Esempio di un Intent Filter per un'Activity che apre link ai profili utente. Il filtro include tutti e tre i gruppi di elementi per un instradamento preciso.

xml
<activity android:name=".ProfileActivity">
    <intent-filter>
        <action
            android:name="android.intent.action.VIEW" />
        <category
            android:name="android.intent.category.DEFAULT" />
        <category
            android:name="android.intent.category.BROWSABLE" />
        <data
            android:scheme="myapp"
            android:host="profile" />
    </intent-filter>
</activity>

Notare la specifica obbligatoria di category DEFAULT — senza di essa il sistema non trasmetterà Intent impliciti al componente. La categoria BROWSABLE viene aggiunta se il link deve essere gestito dal browser.

Un deep link su Android viene configurato tramite un Intent Filter con action VIEW e un tag data contenente schema, host e percorso. Seguendo un link come myapp://profile/42, il sistema trova un'Activity con un filtro corrispondente e la avvia con l'URI passato. È importante configurare correttamente pathPrefix, pathPattern o path per una corrispondenza esatta.

A partire da Android 6 (API 23), è stato aggiunto il supporto per App Links — deep link verificati tramite HTTPS. Gli App Links utilizzano lo stesso Intent Filter ma con una verifica aggiuntiva del dominio tramite Digital Asset Links. Dopo la verifica, il sistema apre automaticamente l'applicazione senza una finestra di dialogo di selezione.

Tag Data per URL

Esempio di filtro per App Link con verifica tramite link HTTPS. In questo caso, lo schema è sempre https e l'host corrisponde al dominio specificato in Digital Asset Links.

xml
<intent-filter android:autoVerify="true">
    <action
        android:name="android.intent.action.VIEW" />
    <category
        android:name="android.intent.category.DEFAULT" />
    <category
        android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="https"
        android:host="example.com"
        android:pathPrefix="/profile" />
</intent-filter>

L'attributo autoVerify indica al sistema di verificare i Digital Asset Links durante l'installazione dell'applicazione. Se la verifica ha successo, l'applicazione diventa automaticamente il gestore predefinito per il dominio e i percorsi specificati.

Gestione degli Intent nei componenti dell'applicazione

Dopo che il sistema ha selezionato un componente per gestire l'Intent, lo sviluppatore deve estrarre i dati dall'intent in arrivo all'interno del componente di destinazione. Per Activity, viene utilizzato il metodo getIntent() in onCreate(); per BroadcastReceiver, il metodo onReceive(), dove Intent viene passato come parametro.

L'estrazione dei dati include l'ottenimento dell'action per determinare il tipo di operazione, data per l'URI e parametri extra per informazioni aggiuntive. Ciascuno di questi elementi può essere assente, quindi è obbligatorio un controllo null prima dell'uso.

Codice di gestione in Activity

Esempio di gestione di un deep link in arrivo in un'Activity in Kotlin. Il codice estrae l'URI dall'Intent e prende decisioni di navigazione in base all'host e al percorso.

kotlin
class ProfileActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val uri = intent?.data
        if (uri?.host == "profile") {
            val userId = uri.lastPathSegment
            loadProfile(userId)
        }
    }
}

Si consiglia di utilizzare l'operatore safe call per verificare intent e data per null, poiché l'attività può essere avviata senza un deep link in arrivo. È necessario verificare anche host e pathSegment per null prima di utilizzarli nella navigazione.

Priorità e risoluzione dei conflitti

Se più applicazioni hanno registrato un Intent Filter che corrisponde allo stesso Intent implicito, il sistema mostra all'utente una finestra di dialogo di selezione. L'utente può selezionare un'applicazione per uso singolo o impostare un gestore predefinito. A partire da Android 10, la finestra di dialogo di selezione viene mostrata solo al primo avvio, dopodiché il sistema ricorda la scelta dell'utente.

Per gestire la priorità, viene utilizzato l'attributo android:priority nel tag intent-filter. Più alto è il valore, maggiore è la priorità del componente nella risoluzione dei conflitti. Tuttavia, la priorità non funziona per filtri di diverse applicazioni — in questo caso, viene sempre mostrata una finestra di dialogo di selezione se nessuna applicazione è impostata come predefinita.

Finestra di dialogo di selezione dell'applicazione

Lo sviluppatore può chiamare programmaticamente la finestra di dialogo di selezione tramite Intent.createChooser(), passando l'Intent di destinazione e un titolo. Ciò è utile quando un'applicazione vuole offrire esplicitamente all'utente la scelta di un gestore, anche se un'applicazione predefinita è impostata. Ad esempio, l'invio di immagini ai social network tramite ACTION_SEND con createChooser garantisce la visualizzazione della finestra di dialogo indipendentemente dalle impostazioni predefinite.

Errori comuni nella configurazione di Intent Filter

Uno degli errori più comuni è l'assenza della categoria DEFAULT nell'Intent Filter. Gli sviluppatori copiano la configurazione dagli esempi ma dimenticano di aggiungere questa categoria, con il risultato che l'Activity non riceve Intent impliciti. Il sistema semplicemente non vede il filtro per le chiamate implicite, sebbene gli Intent espliciti continuino a funzionare.

Il secondo errore comune è la specifica errata di scheme nel tag data senza un URI completo. Se viene specificato solo lo schema ma non l'host, il filtro accetterà tutti i link con questo schema da qualsiasi fonte, il che può portare a chiamate indesiderate da fonti non affidabili. Si consiglia di specificare sempre almeno scheme e host.

Il terzo errore è l'assenza di un controllo null per intent.data nel codice dell'Activity. Se l'Activity viene avviata non tramite un deep link ma nel modo standard dal launcher, l'Intent non contiene un URI. L'accesso a intent.data senza controllo causa una NullPointerException e un arresto anomalo dell'applicazione. Utilizzare sempre intent?.data?.toString() con l'operatore safe call.

Domande frequenti

È obbligatorio specificare category DEFAULT in Intent Filter?

Sì, la categoria DEFAULT è obbligatoria per ricevere Intent impliciti. Senza di essa, il sistema non trasmetterà chiamate implicite al componente e l'Intent Filter funzionerà solo per Intent espliciti, che comunque non verificano i filtri.

Quanti Intent Filter può avere una Activity?

Non c'è limite. Una Activity può contenere qualsiasi numero di Intent Filter. Ogni filtro descrive uno scenario di gestione separato, ad esempio un filtro per deep link, un altro per la gestione dei file, un terzo per Share Sheet.

Come si differenzia Intent Filter da App Link?

Intent Filter è un meccanismo generale per gestire Intent impliciti. App Link è un caso speciale di Intent Filter con verifica tramite Digital Asset Links, che assegna automaticamente l'applicazione come gestore predefinito per i link HTTPS su un dominio specificato.

Si può utilizzare Intent Filter per Service o BroadcastReceiver?

Sì, Intent Filter può essere dichiarato non solo per Activity, ma anche per Service e BroadcastReceiver. Per Service, consente di eseguire un servizio in background da altre applicazioni; per BroadcastReceiver, di ricevere messaggi di broadcast di sistema.

Come gestisce Intent Filter i tipi MIME?

Il tipo MIME viene specificato nel tag data tramite l'attributo mimeType. Il filtro determina quali tipi di dati il componente può gestire — ad esempio, image/* per tutte le immagini o text/plain solo per testo semplice. I tipi MIME possono essere combinati con schemi URI.

Riepilogo

  • Intent Filter — una dichiarazione XML in AndroidManifest.xml che definisce quali Intent impliciti un componente dell'applicazione può gestire.
  • Tre gruppi — action, category, data (URI e MIME) compongono il filtro; il componente riceve l'Intent se tutti i gruppi specificati corrispondono.
  • Deep link viene configurato tramite action VIEW e un tag data con schema, host e percorso, opzionalmente con autoVerify per App Links.
  • App Links — link HTTPS verificati tramite Digital Asset Links che non richiedono una finestra di dialogo di selezione dell'applicazione.
  • Conflitti quando più filtri corrispondono vengono risolti da una finestra di dialogo di sistema o dalla priorità per componenti della stessa applicazione.
  • Gestione dell'Intent in arrivo viene effettuata tramite intent.data in Activity o onReceive in BroadcastReceiver con controllo null obbligatorio.
  • Utilizzo — Intent Filter viene utilizzato per l'interazione tra applicazioni, la gestione di link, file ed eventi di sistema.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche