Sobes.tech
Middle

Wie bestimmt die Anwendung die Möglichkeit, einen bestimmten Intent zu verarbeiten?

sobes.tech KI

Antwort von AI

Die Anwendung bestimmt die Möglichkeit, einen Intent zu verarbeiten, durch einen Resolution-Mechanismus, der auf dem Vergleich seines Inhalts mit den Informationen basiert, die in den Komponentenmanifests (Activity, Service, BroadcastReceiver) angegeben sind.

Hauptschritte:

  1. Suche nach geeigneten Filtern (Intent-Filter): Das System sucht in der AndroidManifest.xml nach Komponenten, deren <intent-filter>-Block mit dem Inhalt des Intents übereinstimmt.

    <!-- Beispiel für einen Intent-Filter für eine 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. Übereinstimmung nach Action: Der Intent muss eine Aktion (<action>) enthalten, die mit einer der im intent-filter des Components angegebenen Aktionen übereinstimmt.

  3. Übereinstimmung nach Kategorie: Der Intent muss Kategorien (<category>) enthalten, die Untermengen der im intent-filter angegebenen Kategorien sind. Wenn der Intent keine Kategorien enthält, gilt er als passend, wenn der Filter android.intent.category.DEFAULT enthält.

  4. Übereinstimmung nach Data (Uri und Mime Type): Der Intent kann Daten in Form von Uri und/oder Mime Type enthalten. Diese Daten müssen mit dem Schema (<scheme>), dem Host (<host>), dem Port (<port>), den Pfaden (<path>, <pathPattern>, <pathPrefix>) der Uri und dem Typ (<mimeType>) übereinstimmen, die im intent-filter angegeben sind.

    Teil der Intent-Daten Entsprechendes Element in <data>
    Schema <scheme>
    Authority (Host:Port) <host>, <port>
    Pfad <path>, <pathPattern>, <pathPrefix>
    Mime Type <mimeType>
  5. Übereinstimmung bei Extras (selten, um die Verarbeitungsfähigkeit zu bestimmen): Obwohl Extras vom Component verwendet werden können, beeinflussen sie in der Regel nicht die anfängliche Resolution des Intents.

Für implizite Intents (startActivity(intent), bindService(intent), sendBroadcast(intent)) findet das System alle passenden Komponenten. Wenn mehrere Activities gefunden werden, kann das System dem Benutzer einen Auswahl-Dialog anzeigen („Chooser“). Wenn der Intent explizit ist (Zielkomponente direkt angegeben), versucht das System einfach, die angegebene Komponente zu starten.

PackageManager bietet Methoden wie queryIntentActivities(), queryIntentServices(), queryBroadcastReceivers(), die es ermöglichen, programmatisch zu bestimmen, welche Komponenten einen bestimmten Intent verarbeiten können.