Intent Filter: vad det är, hur det fungerar och används i utveckling

Författare: IT Sectr Publicerad: 2026-05-14 Lästid: 8 min

Intent Filter är en deklarativ deklaration i AndroidManifest.xml som anger för systemet vilka implicita avsikter en applikationskomponent kan hantera. Enligt Android Developer Guide innehåller filtret action, category och data, baserat på vilka systemet dirigerar anrop från andra applikationer och systemhändelser. Android-utveckling använder Intent Filter som den primära mekanismen för lös koppling mellan komponenter i olika applikationer.

Huvudpunkter

  • Intent Filter — XML-deklaration i manifestet som definierar vilka typer av implicita Intent som ett Activity, Service eller BroadcastReceiver kan hantera.
  • Action anger vilken åtgärd komponenten ska utföra — till exempel ACTION_VIEW för att visa data eller ACTION_SEND för att skicka innehåll.
  • Category anger en ytterligare kategori för komponenten — BROWSABLE tillåter anrop från webbläsaren, DEFAULT krävs för implicita Intent.
  • Data beskriver URI, MIME-typ eller schema för de data som bearbetas, vilket är avgörande för att konfigurera deep link i applikationen.
  • Konflikter när flera applikationer som hanterar samma Intent finns, löses via systemets urvalsdialog eller standardinställningar.

Vad är Intent Filter?

Intent Filter är ett konfigurationselement i Android-applikationen som informerar systemet om en komponents förmåga att hantera specifika typer av implicita avsikter. Till skillnad från explicita Intent som anger en specifik klass, innehåller implicita Intent endast en beskrivning av den önskade åtgärden och systemet hittar själv en lämplig komponent baserat på registrerade filter.

Filter deklareras inuti komponenten — Activity, Service eller BroadcastReceiver — i filen AndroidManifest.xml. Varje filter kan innehålla flera element av action, category och data. En komponent kan ha ett obegränsat antal Intent Filter, där varje filter beskriver ett separat bearbetningsscenario.

Roll i Android-arkitekturen

Intent Filter implementerar principen om lös koppling mellan applikationskomponenter. Applikation A behöver inte känna till existensen av applikation B — den skickar bara ett Intent med en beskrivning av åtgärden och systemet dirigerar det baserat på filtren. Denna mekanism ligger till grund för Share Sheet, webbläsarval och hantering av deep link.

Typer av Intent: explicita och implicita

Explicita Intent anger en specifik klass av komponenten för start. De används för intern navigering inom en applikation när utvecklaren vet exakt vilket Activity som ska öppnas. Implicita Intent innehåller endast en beskrivning av åtgärden och komponenten bestäms dynamiskt av systemet.

Intent Filter arbetar uteslutande med implicita Intent. Om en specifik klass anges i Intent ignorerar systemet alla filter och startar den angivna komponenten direkt. Filter kontrolleras endast vid upplösning av implicita anrop, vilket gör dem till en nyckelelement för kommunikation mellan applikationer.

Jämförelse av explicita och implicita Intent

EgenskapExplicit IntentImplicit Intent
KomponentAnges explicit (className)Bestäms av systemet
Intent FilterKrävs inteKrävs
ExempelstartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse(“https://example.com”))
SäkerhetHögre (ingen avlyssning)Lägre (möjliga konflikter)

Struktur för Intent Filter i manifestet

Varje Intent Filter består av tre grupper av element — action, category och data — vars kombination avgör vilka Intent komponenten kommer att ta emot. Filtret anses vara uppfyllt om Intent matchar minst ett element från varje grupp.

Action beskriver den åtgärd som utförs — visning, redigering, sändning. Category lägger till ytterligare bearbetningskontext — till exempel möjlighet att startas från webbläsaren. Data definierar formatet på den information som bearbetas via URI eller MIME-typ.

Element i intent-filter-taggen

Exempel på Intent Filter för ett Activity som öppnar länkar till användarprofiler. Filtret inkluderar alla tre grupper av element för exakt dirigering.

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>

Observera den obligatoriska angivelsen av category DEFAULT — utan den kommer systemet inte att vidarebefordra implicita Intent till komponenten. Kategorin BROWSABLE läggs till om länken ska bearbetas från webbläsaren.

Deep link på Android konfigureras via Intent Filter med action VIEW och en data-tagg som innehåller schema, host och sökväg. När man navigerar till en länk av typen myapp://profile/42 hittar systemet Activity med matchande filter och startar det med det överförda URI:t. Det är viktigt att korrekt konfigurera pathPrefix, pathPattern eller path för exakt matchning.

Från och med Android 6 (API 23) finns stöd för App Links — verifierade deep links via HTTPS. För App Links används samma Intent Filter, men med ytterligare domänverifiering via Digital Asset Links. Efter verifiering öppnar systemet automatiskt applikationen utan urvalsdialog.

Data-tagg för URL

Exempel på filter för App Link med verifiering via HTTPS-länk. I detta fall är schemat alltid https och hosten motsvarar domänen som anges i 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>

Attributet autoVerify instruerar systemet att kontrollera Digital Asset Links vid installation av applikationen. Om verifieringen lyckas blir applikationen automatiskt standardhanterare för den angivna domänen och sökvägarna.

Hantera Intent i applikationskomponenter

Efter att systemet har valt en komponent för att bearbeta Intent måste utvecklaren extrahera data från den inkommande avsikten inuti målkomponenten. För Activity används metoden getIntent() i onCreate(), för BroadcastReceiver metoden onReceive(), där Intent skickas som en parameter.

Dataextraktion inkluderar att hämta action för att bestämma operationstyp, data för URI och extra-parametrar för ytterligare information. Var och en av dessa element kan saknas, därför krävs null-kontroll före användning.

Bearbetningskod i Activity

Exempel på bearbetning av inkommande deep link i Activity i Kotlin. Koden extraherar URI från Intent och baserat på host och sökväg fattar den navigeringsbeslut.

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)
        }
    }
}

Det rekommenderas att använda safe call-operatorn för att kontrollera intent och data för null, eftersom aktiviteten kan startas utan inkommande deep link. Man bör också kontrollera host och pathSegment för null innan de används i navigeringen.

Prioritet och konfliktlösning

Om flera applikationer har registrerat ett Intent Filter som matchar samma implicita Intent visar systemet en urvalsdialog för användaren. Användaren kan välja en applikation för engångsbruk eller ställa in en standardhanterare. Från och med Android 10 visas urvalsdialogen endast vid första anropet, därefter kommer systemet ihåg användarens val.

För prioritetshantering används attributet android:priority i intent-filter-taggen. Ju högre värde, desto högre prioritet har komponenten vid konfliktlösning. Prioritet fungerar dock inte för filter från olika applikationer — i detta fall visas alltid en urvalsdialog om ingen applikation är inställd som standard.

Urvalsdialog för applikation

Utvecklaren kan programmatiskt anropa urvalsdialogen via Intent.createChooser() genom att skicka det önskade Intent och en titel. Detta är användbart när applikationen vill uttryckligen föreslå att användaren väljer en hanterare, även om en standardapplikation är inställd. Till exempel vid sändning av bilder till sociala nätverk via ACTION_SEND garanterar createChooser att dialogen visas oavsett standardinställningar.

Vanliga misstag vid konfiguration av Intent Filter

Ett av de vanligaste misstagen är avsaknaden av kategorin DEFAULT i Intent Filter. Utvecklare kopierar konfigurationen från exempel men glömmer att lägga till denna kategori, vilket resulterar i att Activity inte tar emot implicita Intent. Systemet ser helt enkelt inte filtret för implicita anrop, även om explicita Intent fortfarande fungerar.

Det andra vanliga misstaget är felaktig angivelse av scheme i data-taggen utan fullständigt URI. Om endast schemat anges men inte hosten, kommer filtret att acceptera alla länkar med detta schema från vilken källa som helst, vilket kan leda till oönskade anrop från overifierade källor. Det rekommenderas att alltid ange åtminstone schema och host.

Det tredje misstaget är avsaknaden av kontroll av intent.data för null i Activity-koden. Om Activity startas inte via deep link utan på standardsätt från startprogrammet, innehåller Intent inget URI. Åtkomst till intent.data utan kontroll orsakar NullPointerException och applikationskrasch. Använd alltid intent?.data?.toString() med safe call-operatorn.

Vanliga frågor

Är det obligatoriskt att ange category DEFAULT i Intent Filter?

Ja, för att ta emot implicita Intent är kategorin DEFAULT obligatorisk. Utan den kommer systemet inte att vidarebefordra implicita anrop till komponenten och Intent Filter kommer endast att fungera för explicita Intent, som ändå inte kontrollerar filter.

Hur många Intent Filter kan ett Activity ha?

Det finns inga begränsningar. Ett Activity kan innehålla hur många Intent Filter som helst. Varje filter beskriver ett separat bearbetningsscenario, till exempel ett filter för deep link, ett annat för filhantering och ett tredje för Share Sheet.

Vad är skillnaden mellan Intent Filter och App Link?

Intent Filter är en allmän mekanism för att hantera implicita Intent. App Link är ett specialfall av Intent Filter med verifiering via Digital Asset Links som automatiskt anger applikationen som standardhanterare för HTTPS-länkar på en angiven domän.

Kan Intent Filter användas för Service eller BroadcastReceiver?

Ja, Intent Filter kan deklareras inte bara för Activity utan också för Service och BroadcastReceiver. För Service möjliggör detta att starta en bakgrundstjänst från andra applikationer, för BroadcastReceiver — att ta emot systemutsändningar.

Hur hanterar Intent Filter MIME-typer?

MIME-typen anges i data-taggen via attributet mimeType. Filtret bestämmer vilka datatyper komponenten kan hantera — till exempel image/* för alla bilder eller text/plain endast för vanlig text. MIME-typer kan kombineras med URI-scheman.

Sammanfattning

  • Intent Filter — XML-deklaration i AndroidManifest.xml som definierar vilka implicita Intent en applikationskomponent kan hantera.
  • Tre grupper — action (åtgärd), category (kategori), data (URI och MIME) utgör filtret; komponenten tar emot Intent om alla angivna grupper matchar.
  • Deep link konfigureras via action VIEW och data-tagg med schema, host och sökväg, valfritt med autoVerify för App Links.
  • App Links — verifierade HTTPS-länkar via Digital Asset Links som inte kräver urvalsdialog för applikation.
  • Konflikter när flera filter matchar löses via systemdialog eller prioritet för komponenter i samma applikation.
  • Hantering av inkommande Intent görs via intent.data i Activity eller onReceive i BroadcastReceiver med obligatorisk null-kontroll.
  • Användning — Intent Filter används för kommunikation mellan applikationer, hantering av länkar, filer och systemhändelser.

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också