Ответ
Да, работал. Intent — это механизм для взаимодействия между компонентами приложения (Activity, Service, BroadcastReceiver) или между разными приложениями.
Типы Intent:
- Явные (Explicit) — указываем конкретный компонент для запуска.
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
- Неявные (Implicit) — описываем действие, а система сама находит подходящий компонент.
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
startActivity(intent)
Использование:
- Запуск Activity, Service.
- Передача данных через
putExtra(). - Обработка Broadcast-сообщений.
Нюансы:
- Проверка наличия обработчика для неявного Intent (
resolveActivity()). - Ограничения на неявные Intent в Android 11+ (package visibility).
Ответ 18+ 🔞
Э, слушай, да я с этой хуйнёй работал, с Intents. Это ж, блядь, как такой универсальный курьер между всеми частями приложения — между Activity, Service, BroadcastReceiver, или вообще между разными приложениями, если надо. Механизм, сука, древний, но живучий.
Типы, бля, этих Intent'ов:
- Явные (Explicit) — это когда ты точно знаешь, кого будишь. Как будто звонишь конкретному чуваку по имени. «Эй, SecondActivity, подъёбывайся, поехали!»
val intent = Intent(this, SecondActivity::class.java)
startActivity(intent)
- Неявные (Implicit) — а это уже, ёпта, объявление на площади. «Эй, народ! Кто умеет в интернеты смотреть?» А система уже сама ищет, кто из установленных браузеров первый откликнется. Удобно, но, бля, доверия ебать ноль — никогда не знаешь, какая мартышлюшка тебе откроется.
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("https://google.com"))
startActivity(intent)
Где это всё применяется, спросишь?
Ну, запуск любой новой Activity или Service — это святое. Передача данных туда — через putExtra(), как записку в карман курьеру суёшь. Ну и ловля этих самых Broadcast-сообщений от системы — типа «батарея сдохла» или «самолётный режим включили».
А теперь нюансы, бля, на которых все обжигаются:
Во-первых, с неявными интентами. Прежде чем кричать на площади, проверь, а есть ли хоть один чувак, который это действие обработает. Иначе будет тебе ActivityNotFoundException — типа, овердохуища желающих, но нихуя. Для этого resolveActivity().
А во-вторых, главный подвох последних лет. Начиная с Android 11, система стала хитрожопой. Если твоё приложение таргетирует API 30+, то оно по умолчанию нихуя не видит, какие другие приложения установлены, чтобы неявный интент им отправить. Это называется package visibility restrictions. То есть твой крик «Кто умеет звонить?» может упереться в глухую стену, если ты заранее в манифесте не прописал, с кем конкретно ты хочешь общаться. Вот такая, блядь, защита от слежки, а на деле — головная боль.