Sobes.tech
Middle

Comment l'application détermine-t-elle la possibilité de traiter un Intent spécifique?

sobes.tech IA

Réponse de l'IA

L’application détermine la possibilité de traiter un Intent via un mécanisme de résolution basé sur la comparaison de son contenu avec les informations spécifiées dans les manifestes des composants (Activity, Service, BroadcastReceiver).

Étapes principales :

  1. Recherche de filtres appropriés (Filtres d’Intent) : Le système recherche dans le fichier AndroidManifest.xml les composants dont le <intent-filter> correspond au contenu de l’Intent.

    <!-- Exemple de filtre d’intent pour une Activity -->
    <activity android:name=".SomeActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>
    
  2. Correspondance par Action : L’Intent doit contenir une action (<action>), qui correspond à l’une des actions spécifiées dans le intent-filter du composant.

  3. Correspondance par Catégorie : L’Intent doit contenir des catégories (<category>), qui sont des sous-ensembles des catégories spécifiées dans le intent-filter. Si l’Intent ne contient pas de catégories, il sera considéré comme correspondant si le filtre inclut android.intent.category.DEFAULT.

  4. Correspondance par Data (Uri et Type MIME) : L’Intent peut contenir des données sous forme d’Uri et/ou de Type MIME. Ces données doivent correspondre au schéma (<scheme>), à l’hôte (<host>), au port (<port>), aux chemins (<path>, <pathPattern>, <pathPrefix>) de Uri et au type (<mimeType>) spécifiés dans le intent-filter.

    Partie des données de l’Intent Élément correspondant dans <data>
    Schéma <scheme>
    Autorité (Hôte:Port) <host>, <port>
    Chemin <path>, <pathPattern>, <pathPrefix>
    Type MIME <mimeType>
  5. Correspondance des Extras (rarement pour déterminer la capacité de traitement) : Bien que les extras puissent être utilisés par le composant, ils n’affectent généralement pas la résolution initiale de l’Intent.

Pour les Intents implicites (startActivity(intent), bindService(intent), sendBroadcast(intent)), le système trouve tous les composants appropriés. Si plusieurs Activities sont trouvées, le système peut afficher une boîte de dialogue de sélection à l’utilisateur ("Chooser"). Si l’Intent est explicite (le composant cible est spécifié directement), le système tente simplement de lancer le composant indiqué.

PackageManager fournit des méthodes telles que queryIntentActivities(), queryIntentServices(), queryBroadcastReceivers(), permettant de déterminer de manière programmatique quels composants peuvent traiter un Intent spécifique.