Как Intent будет ловиться в системе

«Как Intent будет ловиться в системе» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Intent можно ловить несколькими способами:

  1. Явный Intent - указываем конкретный компонент (Activity/Service/BroadcastReceiver):
val intent = Intent(this, TargetActivity::class.java)
startActivity(intent)
  1. Неявный Intent - система ищет подходящий компонент по action, категориям и data:
val intent = Intent(Intent.ACTION_VIEW).apply {
    data = Uri.parse("https://google.com")
}
startActivity(intent)
  1. Broadcast Receiver - для системных/кастомных событий:
val filter = IntentFilter().apply {
    addAction(Intent.ACTION_AIRPLANE_MODE_CHANGED)
}
registerReceiver(receiver, filter)

Для Activity нужно объявить IntentFilter в манифесте:

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="http" />
</intent-filter>

Важно: с Android 8+ ограничена работа неявных Broadcast Intent'ов. Для фоновых задач лучше использовать WorkManager или JobScheduler.