Intent Filter: τι είναι, πώς λειτουργεί και χρησιμοποιείται στην ανάπτυξη

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-05-14 Χρόνος ανάγνωσης: 8 λεπ

Το Intent Filter είναι μια δηλωτική δήλωση στο AndroidManifest.xml που υποδεικνύει στο σύστημα ποιες σιωπηρές προθέσεις μπορεί να επεξεργαστεί ένα στοιχείο της εφαρμογής. Σύμφωνα με τον Οδηγό Ανάπτυξης Android, το φίλτρο περιέχει action, category και data, βάσει των οποίων το σύστημα δρομολογεί κλήσεις από άλλες εφαρμογές και συστήματα συμβάντα. Η ανάπτυξη Android χρησιμοποιεί το Intent Filter ως τον κύριο μηχανισμό χαλαρής σύνδεσης μεταξύ στοιχείων διαφορετικών εφαρμογών.

Κύρια σημεία

  • Intent Filter — δήλωση XML στο manifest που καθορίζει τους τύπους σιωπηρών Intent που μπορεί να επεξεργαστεί ένα Activity, Service ή BroadcastReceiver.
  • Action καθορίζει την ενέργεια που πρέπει να εκτελέσει το στοιχείο — για παράδειγμα, ACTION_VIEW για προβολή δεδομένων ή ACTION_SEND για αποστολή περιεχομένου.
  • Category ορίζει μια πρόσθετη κατηγορία του στοιχείου — BROWSABLE επιτρέπει την κλήση από το πρόγραμμα περιήγησης, DEFAULT απαιτείται για σιωπηρά Intent.
  • Data περιγράφει το URI, τον τύπο MIME ή το σχήμα των δεδομένων που υποβάλλονται σε επεξεργασία, κάτι που είναι κρίσιμο για τη ρύθμιση deep link στην εφαρμογή.
  • Συγκρούσεις όταν υπάρχουν πολλές εφαρμογές που επεξεργάζονται το ίδιο Intent, επιλύονται μέσω διαλόγου επιλογής συστήματος ή ρυθμίσεων προεπιλογής.

Τι είναι το Intent Filter;

Intent Filter είναι ένα στοιχείο διαμόρφωσης της εφαρμογής Android που ενημερώνει το σύστημα για τη δυνατότητα ενός στοιχείου να επεξεργάζεται συγκεκριμένους τύπους σιωπηρών προθέσεων. Σε αντίθεση με τα ρητά Intent που καθορίζουν μια συγκεκριμένη κλάση, τα σιωπηρά Intent περιέχουν μόνο περιγραφή της απαιτούμενης ενέργειας και το σύστημα βρίσκει το κατάλληλο στοιχείο βάσει των καταχωρημένων φίλτρων.

Τα φίλτρα δηλώνονται εντός του στοιχείου — Activity, Service ή BroadcastReceiver — στο αρχείο AndroidManifest.xml. Κάθε φίλτρο μπορεί να περιέχει πολλαπλά στοιχεία action, category και data. Ένα στοιχείο μπορεί να έχει απεριόριστο αριθμό Intent Filter, καθένα από τα οποία περιγράφει ένα ξεχωριστό σενάριο επεξεργασίας.

Ρόλος στην αρχιτεκτονική Android

Το Intent Filter υλοποιεί την αρχή της χαλαρής σύνδεσης μεταξύ στοιχείων εφαρμογών. Η εφαρμογή Α δεν χρειάζεται να γνωρίζει την ύπαρξη της εφαρμογής Β — απλώς στέλνει ένα Intent με περιγραφή της ενέργειας και το σύστημα το δρομολογεί βάσει των φίλτρων. Αυτός ο μηχανισμός αποτελεί τη βάση του Share Sheet, της επιλογής προγράμματος περιήγησης και της επεξεργασίας deep link.

Τύποι Intent: ρητές και σιωπηρές

Τα ρητά Intent καθορίζουν μια συγκεκριμένη κλάση στοιχείου για εκκίνηση. Χρησιμοποιούνται για εσωτερική πλοήγηση εντός μιας εφαρμογής, όταν ο προγραμματιστής γνωρίζει ακριβώς ποιο Activity πρέπει να ανοίξει. Τα σιωπηρά Intent περιέχουν μόνο περιγραφή της ενέργειας και το στοιχείο καθορίζεται δυναμικά από το σύστημα.

Το Intent Filter λειτουργεί αποκλειστικά με σιωπηρά Intent. Εάν στο Intent καθορίζεται μια συγκεκριμένη κλάση, το σύστημα αγνοεί όλα τα φίλτρα και εκκινεί το καθορισμένο στοιχείο απευθείας. Τα φίλτρα ελέγχονται μόνο κατά την επίλυση σιωπηρών κλήσεων, καθιστώντας τα βασικό στοιχείο διαλειτουργικότητας μεταξύ εφαρμογών.

Σύγκριση ρητών και σιωπηρών Intent

ΧαρακτηριστικόΡητό IntentΣιωπηρό Intent
ΣτοιχείοΚαθορίζεται ρητά (className)Καθορίζεται από το σύστημα
Intent FilterΔεν απαιτείταιΑπαιτείται
ΠαράδειγμαstartActivity(Intent(this, ProfileActivity::class.java))Intent(ACTION_VIEW, Uri.parse(“https://example.com”))
ΑσφάλειαΥψηλότερη (χωρίς υποκλοπή)Χαμηλότερη (πιθανές συγκρούσεις)

Δομή Intent Filter στο manifest

Κάθε Intent Filter αποτελείται από τρεις ομάδες στοιχείων — action, category και data — ο συνδυασμός των οποίων καθορίζει ποια Intent θα λαμβάνει το στοιχείο. Το φίλτρο θεωρείται ότι ικανοποιείται εάν το Intent ταιριάζει με τουλάχιστον ένα στοιχείο από κάθε ομάδα.

Το Action περιγράφει την εκτελούμενη ενέργεια — προβολή, επεξεργασία, αποστολή. Η Category προσθέτει πρόσθετο πλαίσιο επεξεργασίας — για παράδειγμα, δυνατότητα εκκίνησης από το πρόγραμμα περιήγησης. Το Data καθορίζει τη μορφή των πληροφοριών που υποβάλλονται σε επεξεργασία μέσω URI ή τύπου MIME.

Στοιχεία της ετικέτας intent-filter

Παράδειγμα Intent Filter για Activity που ανοίγει συνδέσμους προφίλ χρηστών. Το φίλτρο περιλαμβάνει και τις τρεις ομάδες στοιχείων για ακριβή δρομολόγηση.

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>

Σημειώστε την υποχρεωτική αναφορά category DEFAULT — χωρίς αυτήν, το σύστημα δεν θα μεταδίδει σιωπηρά Intent στο στοιχείο. Η κατηγορία BROWSABLE προστίθεται εάν ο σύνδεσμος πρέπει να υποβάλλεται σε επεξεργασία από το πρόγραμμα περιήγησης.

Το Deep link στο Android ρυθμίζεται μέσω Intent Filter με action VIEW και ετικέτα data που περιέχει σχήμα, host και διαδρομή. Κατά τη μετάβαση σε έναν σύνδεσμο της μορφής myapp://profile/42, το σύστημα βρίσκει το Activity με το κατάλληλο φίλτρο και το εκκινεί με το μεταδιδόμενο URI. Είναι σημαντικό να ρυθμίσετε σωστά τα pathPrefix, pathPattern ή path για ακριβή αντιστοίχιση.

Από το Android 6 (API 23) και μετά, υποστηρίζονται App Links — επαληθευμένα deep link μέσω HTTPS. Για τα App Links χρησιμοποιείται το ίδιο Intent Filter, αλλά με πρόσθετη επαλήθευση τομέα μέσω Digital Asset Links. Μετά την επαλήθευση, το σύστημα ανοίγει αυτόματα την εφαρμογή χωρίς διάλογο επιλογής.

Ετικέτα Data για URL

Παράδειγμα φίλτρου για App Link με επαλήθευση μέσω συνδέσμου HTTPS. Σε αυτήν την περίπτωση, το σχήμα είναι πάντα https και ο host αντιστοιχεί στον τομέα που καθορίζεται στα 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>

Το χαρακτηριστικό autoVerify υποδεικνύει στο σύστημα να ελέγξει τα Digital Asset Links κατά την εγκατάσταση της εφαρμογής. Εάν η επαλήθευση είναι επιτυχής, η εφαρμογή γίνεται αυτόματα ο προεπιλεγμένος χειριστής για τον καθορισμένο τομέα και τις διαδρομές.

Επεξεργασία Intent σε στοιχεία εφαρμογής

Αφού το σύστημα επιλέξει ένα στοιχείο για την επεξεργασία του Intent, ο προγραμματιστής πρέπει να εξάγει τα δεδομένα από την εισερχόμενη πρόθεση εντός του στοιχείου-στόχου. Για το Activity χρησιμοποιείται η μέθοδος getIntent() στην onCreate(), για το BroadcastReceiver η μέθοδος onReceive(), όπου το Intent μεταβιβάζεται ως παράμετρος.

Η εξαγωγή δεδομένων περιλαμβάνει τη λήψη του action για τον προσδιορισμό του τύπου λειτουργίας, του data για το URI και των extra-παραμέτρων για πρόσθετες πληροφορίες. Κάθε ένα από αυτά τα στοιχεία μπορεί να απουσιάζει, επομένως απαιτείται έλεγχος null πριν από τη χρήση.

Κώδικας επεξεργασίας σε Activity

Παράδειγμα επεξεργασίας εισερχόμενου deep link σε Activity σε Kotlin. Ο κώδικας εξάγει το URI από το Intent και βάσει του host και της διαδρομής λαμβάνει απόφαση πλοήγησης.

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

Συνιστάται η χρήση safe call operator για τον έλεγχο των intent και data για null, καθώς η δραστηριότητα μπορεί να εκκινηθεί χωρίς εισερχόμενο deep link. Επίσης, πρέπει να ελέγχετε τα host και pathSegment για null πριν από τη χρήση τους στην πλοήγηση.

Προτεραιότητα και επίλυση συγκρούσεων

Εάν πολλές εφαρμογές έχουν καταχωρήσει Intent Filter που ταιριάζει στο ίδιο σιωπηρό Intent, το σύστημα εμφανίζει στον χρήστη έναν διάλογο επιλογής. Ο χρήστης μπορεί να επιλέξει μια εφαρμογή για μία χρήση ή να ορίσει έναν προεπιλεγμένο χειριστή. Από το Android 10, ο διάλογος επιλογής εμφανίζεται μόνο στην πρώτη κλήση, μετά την οποία το σύστημα απομνημονεύει την επιλογή του χρήστη.

Για τη διαχείριση της προτεραιότητας χρησιμοποιείται το χαρακτηριστικό android:priority στην ετικέτα intent-filter. Όσο μεγαλύτερη η τιμή, τόσο μεγαλύτερη προτεραιότητα έχει το στοιχείο κατά την επίλυση συγκρούσεων. Ωστόσο, η προτεραιότητα δεν λειτουργεί για φίλτρα από διαφορετικές εφαρμογές — σε αυτήν την περίπτωση εμφανίζεται πάντα διάλογος επιλογής, εάν καμία εφαρμογή δεν έχει οριστεί ως προεπιλεγμένη.

Διάλογος επιλογής εφαρμογής

Ο προγραμματιστής μπορεί να καλέσει προγραμματιστικά τον διάλογο επιλογής μέσω Intent.createChooser(), μεταβιβάζοντας το επιθυμητό Intent και έναν τίτλο. Αυτό είναι χρήσιμο όταν η εφαρμογή θέλει να προτείνει ρητά στον χρήστη να επιλέξει έναν χειριστή, ακόμη και αν έχει οριστεί προεπιλεγμένη εφαρμογή. Για παράδειγμα, κατά την αποστολή εικόνων σε κοινωνικά δίκτυα μέσω ACTION_SEND, η createChooser εγγυάται την εμφάνιση του διαλόγου ανεξάρτητα από τις προεπιλεγμένες ρυθμίσεις.

Συνήθη λάθη στη ρύθμιση Intent Filter

Ένα από τα πιο συνηθισμένα λάθη είναι η απουσία της κατηγορίας DEFAULT στο Intent Filter. Οι προγραμματιστές αντιγράφουν τη διαμόρφωση από παραδείγματα αλλά ξεχνούν να προσθέσουν αυτήν την κατηγορία, με αποτέλεσμα το Activity να μην λαμβάνει σιωπηρά Intent. Το σύστημα απλά δεν βλέπει το φίλτρο για σιωπηρές κλήσεις, αν και τα ρητά Intent συνεχίζουν να λειτουργούν.

Το δεύτερο συνηθισμένο λάθος είναι η εσφαλμένη αναφορά scheme στην ετικέτα data χωρίς πλήρες URI. Εάν αναφέρεται μόνο το σχήμα αλλά όχι ο host, το φίλτρο θα δέχεται όλους τους συνδέσμους με αυτό το σχήμα από οποιαδήποτε πηγή, κάτι που μπορεί να οδηγήσει σε ανεπιθύμητες κλήσεις από μη επαληθευμένες πηγές. Συνιστάται να αναφέρετε πάντα τουλάχιστον σχήμα και host.

Το τρίτο λάθος είναι η απουσία ελέγχου intent.data για null στον κώδικα του Activity. Εάν το Activity εκκινείται όχι μέσω deep link αλλά με τον τυπικό τρόπο από τον εκκινητή, το Intent δεν περιέχει URI. Η πρόσβαση στο intent.data χωρίς έλεγχο προκαλεί NullPointerException και σφάλμα της εφαρμογής. Χρησιμοποιείτε πάντα intent?.data?.toString() με τον τελεστή safe call.

Συχνές ερωτήσεις

Είναι υποχρεωτική η αναφορά category DEFAULT στο Intent Filter;

Ναι, για τη λήψη σιωπηρών Intent η κατηγορία DEFAULT είναι υποχρεωτική. Χωρίς αυτήν, το σύστημα δεν θα μεταδίδει σιωπηρές κλήσεις στο στοιχείο και το Intent Filter θα λειτουργεί μόνο για ρητά Intent, τα οποία ούτως ή άλλως δεν ελέγχουν τα φίλτρα.

Πόσα Intent Filter μπορεί να έχει ένα Activity;

Δεν υπάρχουν περιορισμοί. Ένα Activity μπορεί να περιέχει οποιονδήποτε αριθμό Intent Filter. Κάθε φίλτρο περιγράφει ένα ξεχωριστό σενάριο επεξεργασίας, για παράδειγμα ένα φίλτρο για deep link, άλλο για επεξεργασία αρχείων και τρίτο για Share Sheet.

Σε τι διαφέρει το Intent Filter από το App Link;

Το Intent Filter είναι ένας γενικός μηχανισμός για την επεξεργασία σιωπηρών Intent. Το App Link είναι μια ειδική περίπτωση Intent Filter με επαλήθευση μέσω Digital Asset Links, που ορίζει αυτόματα την εφαρμογή ως προεπιλεγμένο χειριστή για συνδέσμους HTTPS σε έναν συγκεκριμένο τομέα.

Μπορεί να χρησιμοποιηθεί Intent Filter για Service ή BroadcastReceiver;

Ναι, το Intent Filter μπορεί να δηλωθεί όχι μόνο για Activity αλλά και για Service και BroadcastReceiver. Για το Service, αυτό επιτρέπει την εκκίνηση μιας υπηρεσίας παρασκηνίου από άλλες εφαρμογές, για το BroadcastReceiver — τη λήψη συστημικών εκπομπών.

Πώς επεξεργάζεται το Intent Filter τους τύπους MIME;

Ο τύπος MIME αναφέρεται στην ετικέτα data μέσω του χαρακτηριστικού mimeType. Το φίλτρο καθορίζει ποιους τύπους δεδομένων μπορεί να επεξεργαστεί το στοιχείο — για παράδειγμα, image/* για όλες τις εικόνες ή text/plain μόνο για απλό κείμενο. Οι τύποι MIME μπορούν να συνδυάζονται με σχήματα URI.

Σύνοψη

  • Intent Filter — δήλωση XML στο AndroidManifest.xml που καθορίζει ποια σιωπηρά Intent μπορεί να επεξεργαστεί ένα στοιχείο της εφαρμογής.
  • Τρεις ομάδες — action (ενέργεια), category (κατηγορία), data (URI και MIME) αποτελούν το φίλτρο· το στοιχείο λαμβάνει Intent εάν ταιριάζουν όλες οι καθορισμένες ομάδες.
  • Deep link ρυθμίζεται μέσω action VIEW και ετικέτας data με σχήμα, host και διαδρομή, προαιρετικά με autoVerify για App Links.
  • App Links — επαληθευμένοι σύνδεσμοι HTTPS μέσω Digital Asset Links, που δεν απαιτούν διάλογο επιλογής εφαρμογής.
  • Συγκρούσεις όταν ταιριάζουν πολλά φίλτρα επιλύονται μέσω διαλόγου συστήματος ή προτεραιότητας για στοιχεία της ίδιας εφαρμογής.
  • Επεξεργασία εισερχόμενου Intent γίνεται μέσω intent.data σε Activity ή onReceive σε BroadcastReceiver με υποχρεωτικό έλεγχο για null.
  • Εφαρμογή — το Intent Filter χρησιμοποιείται για διαλειτουργικότητα μεταξύ εφαρμογών, επεξεργασία συνδέσμων, αρχείων και συστημικών συμβάντων.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης