Что нужно сделать, чтобы приложение могло получать неявные интенты в Android
Что проверяют
Знаете ли вы, как система сопоставляет интент с компонентами, и следите ли за изменениями платформы, из-за которых старый манифест перестаёт работать. Следом обычно спрашивают про App Links или про то, почему приложение не получает системный broadcast.
Как отвечать
Приём неявного интента настраивается в AndroidManifest.xml через <intent-filter> у нужного компонента:
<action>: какое действие вы обрабатываете, напримерandroid.intent.action.SENDилиVIEW;<category>: для Activity обязательнаandroid.intent.category.DEFAULT, потому чтоstartActivity()добавляет её к каждому неявному интенту. Для ссылок из браузера нужна ещёBROWSABLE;<data>: схема, хост, путь илиmimeType, напримерtext/plainдля приёма текста через «Поделиться»;android:exported: с Android 12 (API 31) у компонента с фильтром его нужно указать явно, иначе сборка под этот target не пройдёт. Для приёма чужих интентов значениеtrue.
Затем разберите интент в коде: в Kotlin это intent.action и intent.data в onCreate(). Если у Activity launchMode равен singleTop или singleTask, повторный интент приходит в onNewIntent(), обрабатывать его нужно и там.
Для веб-ссылок назовите App Links: android:autoVerify="true" и файл /.well-known/assetlinks.json на домене. С Android 12 неверифицированное приложение не перехватывает https-ссылки, они открываются в браузере, пока пользователь сам не разрешит домен в настройках.
Про остальные компоненты: неявный интент для Service запрещён с Android 5.0, а большинство неявных broadcast с Android 8 не доставляется получателям из манифеста, их регистрируют в коде.
Где спотыкаются
Забывают категорию DEFAULT. Фильтр выглядит правильно, но Activity в списке выбора не появляется.
Обрабатывают данные только в onCreate(). При повторном открытии уже запущенной Activity с singleTop новые данные тихо теряются.
Доверяют входящим данным. Любое приложение может прислать интент с произвольным Uri или extras, поэтому их проверяют как пользовательский ввод, особенно пути к файлам и параметры deep link.