Работал ли с Intent

Ответ

Да, работал. 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. То есть твой крик «Кто умеет звонить?» может упереться в глухую стену, если ты заранее в манифесте не прописал, с кем конкретно ты хочешь общаться. Вот такая, блядь, защита от слежки, а на деле — головная боль.