Kako aplikacija određuje mogućnost obrade određenog Intent-a?
sobes.tech АИ
Одговор од АИ
Апликација одређује могућност обраде Intent-а кроз механизам за одобравање Intent-а, заснован на поређењу његовог садржаја са информацијама наведеним у манифестима компоненти (Activity, Service, BroadcastReceiver).
Основни кораци:
-
Проналажење одговарајућих филтера (Intent Filters): Систем тражи компоненте објављене у
AndroidManifest.xml, чији блок<intent-filter>одговара садржају Intent-а.<!-- Пример intent-филтра за 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> -
Поређење по Action: Intent мора садржати акцију (
<action>), која се поклапа са једним од акција наведених уintent-filterкомпоненти. -
Поређење по Категорији: Intent мора садржати категорије (
<category>), које су подскуп категорија наведених уintent-filter. Ако Intent не садржи категорије, он ће се сматрати одговарајућим ако филтер садржиandroid.intent.category.DEFAULT. -
Поређење по Data (Uri и Mime Type): Intent може садржати податке у виду Uri и/или Mime Type. Ови подаци морају одговарати схеми (
<scheme>), хосту (<host>), порту (<port>), путевима (<path>,<pathPattern>,<pathPrefix>) Uri и типу (<mimeType>), наведеним уintent-filter.Делови Intent Data Одговарајући елемент у <data>Scheme <scheme>Authority (Host:Port) <host>,<port>Path <path>,<pathPattern>,<pathPrefix>Mime Type <mimeType> -
Поређење Extras (ретко за одређивање могућности обраде): Иако се екстраси могу користити од стране компоненти, они обично не утичу на прво одобравање Intent-а.
За нејасне Intent-ове (startActivity(intent), bindService(intent), sendBroadcast(intent)), систем проналази све одговарајуће компоненте. Ако је пронађено више Activity-ја, систем може приказати дијалог за избор ("Chooser"). Ако је Intent јасан (директно наведен циљани компонент), систем једноставно покушава да покрене наведени компонент.
PackageManager пружа методе као што су queryIntentActivities(), queryIntentServices(), queryBroadcastReceivers(), које омогућавају програмирање да се одреди које компоненте могу обрадити конкретан Intent.