Sobes.tech
Middle

Kuidas rakendus määrab kindla Intenti töötlemise võimaluse?

sobes.tech AI

Vastus AI-lt

Rakendus määrab, kas on võimalik Intenti töödelda, kasutades selle sisu võrdlemise mehhanismi, mis põhineb selle teabe võrdlemisel komponentide (Activity, Service, BroadcastReceiver) manifestides märgitud teabega.

Peamised sammud:

  1. Sobivate filtrite (Intent Filters) otsimine: Süsteem otsib AndroidManifest.xml-is avaldatud komponente, mille <intent-filter> plokid vastavad Intenti sisule.

    <!-- Näide intent-filtrist Activity jaoks -->
    <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. Tegevuse põhjal võrdlemine: Intent peab sisaldama tegevust (<action>), mis vastab ühelegi intent-filter-is märgitud tegevustele.

  3. Kategooria põhjal võrdlemine: Intent peab sisaldama kategooriaid (<category>), mis on intent-filter-is märgitud kategooriate alamkogu. Kui Intent ei sisalda kategooriaid, loetakse see sobivaks, kui filter sisaldab android.intent.category.DEFAULT.

  4. Andmete (Uri ja Mime Type) põhjal võrdlemine: Intent võib sisaldada andmeid Uri ja/või Mime Type vormingus. Need andmed peavad vastama <scheme>, <host>, <port>, <path>, <pathPattern>, <pathPrefix> Uri osadele ning <mimeType>-le, mis on märgitud intent-filter-is.

    Intent Data osa Vastav element <data>-s
    Scheme <scheme>
    Authority (Host:Port) <host>, <port>
    Path <path>, <pathPattern>, <pathPrefix>
    Mime Type <mimeType>
  5. Extras'i võrdlemine (harva kasutatav võimaluse määramiseks): Kuigi ekstrad võivad olla komponendi kasutuses, ei mõjuta need tavaliselt Intenti algset lubamist.

Mitteametlike Intentide (startActivity(intent), bindService(intent), sendBroadcast(intent)) puhul leiab süsteem kõik sobivad komponendid. Kui leitakse mitu Activity, võib süsteem näidata valiku dialoogi („Chooser“). Kui Intent on otsene (sihtkomponent on otseselt määratud), püüab süsteem lihtsalt käivitada määratud komponendi.

PackageManager pakub meetodeid nagu queryIntentActivities(), queryIntentServices(), queryBroadcastReceivers(), mis võimaldavad programmeerimisviisiliselt määrata, millised komponendid suudavad konkreetset Intenti töödelda.