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:
-
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> -
Tegevuse põhjal võrdlemine: Intent peab sisaldama tegevust (
<action>), mis vastab ühelegiintent-filter-is märgitud tegevustele. -
Kategooria põhjal võrdlemine: Intent peab sisaldama kategooriaid (
<category>), mis onintent-filter-is märgitud kategooriate alamkogu. Kui Intent ei sisalda kategooriaid, loetakse see sobivaks, kui filter sisaldabandroid.intent.category.DEFAULT. -
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ärgitudintent-filter-is.Intent Data osa Vastav element <data>-sScheme <scheme>Authority (Host:Port) <host>,<port>Path <path>,<pathPattern>,<pathPrefix>Mime Type <mimeType> -
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.