← Назад к вопросам

Что такое Intent фильтры?

1.8 Middle🔥 202 комментариев
#Android компоненты

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Intent фильтры?

Intent фильтры (Intent Filters) — это механизм в Android, который позволяет компонентам приложения (активностям, сервисам, широковещательным приёмникам) объявлять свою способность обрабатывать определённые типы Intent-ов. По сути, это декларация "интересов" компонента, указывающая системе, какие действия, типы данных или схемы URI он может обработать. Фильтры определяются в файле AndroidManifest.xml и играют ключевую роль в системе неявных Intent-ов, обеспечивая гибкое взаимодействие между приложениями.

Основное назначение

Intent фильтры решают две ключевые задачи:

  • Для неявных Intent-ов: Система Android использует фильтры, чтобы найти подходящий компонент для выполнения запроса. Например, когда пользователь хочет открыть веб-ссылка, система ищет активности с фильтром, соответствующим действию ACTION_VIEW и типу данных text/html.
  • Для экспортируемости компонентов: Фильтры позволяют сделать компонент доступным для других приложений. Если у активности есть фильтр, она автоматически становится экспортируемой (если явно не указано иное), то есть может быть запущена извне.

Структура Intent фильтра

В AndroidManifest.xml фильтр задаётся с помощью элемента <intent-filter>, который включает три основных атрибута:

  • <action>: Определяет действие, которое может выполнить компонент. Например, android.intent.action.VIEW для просмотра данных.
  • <category>: Указывает категорию компонента, например, android.intent.category.DEFAULT (обязательна для неявных Intent-ов) или android.intent.category.LAUNCHER для точки входа в приложение.
  • <data>: Описывает тип данных (MIME-тип), схему URI, хост, порт или путь. Например, для обработки HTTP-ссылок используется схема http.

Пример объявления активности с Intent фильтром для открытия веб-ссылок:

<activity android:name=".WebViewActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="https" android:host="example.com" />
    </intent-filter>
</activity>

Как работает сопоставление

При отправке неявного Intent-а система Android выполняет сопоставление (matching) между Intent и доступными фильтрами:

  1. Проверка действия (action): Intent должен включать хотя бы одно действие, указанное в фильтре.
  2. Проверка категорий (category): Все категории Intent должны совпадать с категориями в фильтре. Категория DEFAULT автоматически добавляется к неявным Intent-ам.
  3. Проверка данных (data): Тип данных и URI Intent должны соответствовать хотя бы одному элементу <data> в фильтре.

Если несколько компонентов подходят, система показывает диалог выбора (chooser), чтобы пользователь решил, какое приложение использовать.

Практические примеры использования

  • Запуск активности по умолчанию: Фильтр с категорией LAUNCHER делает активность точкой входа в приложение.
  • Обработка ссылок (Deep Linking): Фильтры позволяют приложению реагировать на определённые URL, что используется в веб-ссылках или push-уведомлениях.
  • Предоставление функциональности другим приложениям: Например, приложение-фоторедактор может объявить фильтр для действия EDIT, чтобы появляться в списке при выборе "Изменить изображение".

Важные нюансы

  • Конфликты фильтров: Если у нескольких приложений есть фильтры для одного Intent, пользователь может выбрать приложение по умолчанию (начиная с Android 11, это требует явного разрешения).
  • Безопасность: Фильтры могут сделать компоненты доступными извне, поэтому важно проверять входящие данные в коде (например, через Intent.getData()).
  • Производительность: Слишком широкие фильтры (например, для всех HTTP-ссылок) могут замедлить поиск компонентов системой.

В целом, Intent фильтры — это фундаментальный механизм межпроцессного взаимодействия (IPC) в Android, который обеспечивает модульность и интеграцию приложений. Их грамотное использование позволяет создавать гибкие и удобные пользовательские сценарии, например, открытие PDF-файлов в выбранном редакторе или совместное использование контента между приложениями через "Поделиться".

Что такое Intent фильтры? | PrepBro