Главная » Разработка для Android » Принцип работы Фильтров намерений в Android

0

При использовании метода startActivity передаваемое неявное Намере- ние, как правило, доходит лишь до одной Активности. Если для выполнения заданного действия с указанными данными годятся сразу несколько Актив- ностей, пользователю предоставлен  список выбора.

Процесс, когда решается, какую Активность лучше запустить, назы- вается Утверждением намерений. Его цель — найти наиболее подходящий Фильтр намерений. В целом весь алгоритм  можно описать следующим об- разом.

1. Android собирает список всех доступных Фильтров намерений из уста- новленных  пакетов.

2. Фильтры, которые не соответствуют  действию или категории  Наме- рения, удаляются из списка.

Совпадение происходит только в том случае, если Фильтр намерений со- держит указанное действие (или если действие для него вовсе не задано).

Совпадения не произойдет,  только если ни одно из действий Фильтра намерений не будет эквивалентно тому, которое задано в Намерении.

Для категорий процесс соответствия более строгий. Фильтр намерений должен включать в себя все категории, заданные в полученном Намере- нии. Фильтр, для которого категории не указаны, может соответствовать только таким же Намерениям (нет категорий).

3. Наконец,  каждая часть пути URI из Намерения сравнивается с тегом data Фильтра намерений. Если в Фильтре указаны  схема (протокол), сервер/принадлежность, путь или тип MIME,  все эти значения  про- веряются  на соответствие  пути URI из Намерения. При любом несов- падении  Фильтр будет удален из списка. Если  в Фильтре намерений не указано ни одного параметра data, его действие будет распростра- няться на любые данные.

§ MIME  — тип данных, который  должен  совпасть. При сравнении типов данных вы можете использовать маски, чтобы охватывать все подтипы  (например, earthquakes/*). Если в Фильтре намерения указан  тип данных, он должен  совпасть  с тем, который  значится в намерении, при отсутствии  тега data подойдет любой тип.

§ Схема — это протокольная часть пути URI, например http:, mailto:

или tel:.

§ Имя  сервера (или  принадлежность данных)  — часть URI  между схемой и самим путем (например, www.google.com). Чтобы  совпало имя сервера, схема Фильтра намерений также должна подойти.

§ После имени сервера идет путь к данным (например, /ig). Путь пройдет проверку  только после схемы и имени сервера, содержа- щихся в теге.

4. Когда вы неявным  образом запускаете Активность и вышеописанный процесс возвращает  более одного совпадения,  пользователю выво- дится список со всеми вариантами.

Компоненты стандартных приложений в Android участвуют в процессе утверждения Намерений точно так же, как и сторонние  программы.  Они не имеют повышенного приоритета и могут быть полностью заменены новыми  Активностями, которые содержат  Фильтры намерений для соответ- ствующих действий.

Источник: Майер P. Android 2 : программирование приложений для планшетных компьютеров и смартфонов : [пер. с англ. ] / Рето Майер. — М. : Эксмо, 2011. — 672 с. — (Мировой компьютерный бестселлер).

По теме:

  • Комментарии