Главная » Разработка для Android » Использование тегов intent-?lter для обслуживания неявных Намерений

0

Если Намерение запрашивает выполнение какого-либо действия с опре- деленным набором данных, каким образом Android выбирает приложение (или компонент) для обслуживания этого запроса?

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

Задействуя Фильтры намерений, приложения объявляют,  что они могут отвечать на действия, запрашиваемые любой другой программой, установ- ленной на устройстве.

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

action. Использует атрибут android:name, чтобы задать название действия,  которое будет обслуживаться. Каждый  Фильтр намерений должен  иметь один (и только один)  тег action. Действия должны быть представлены  в виде уникальных строк, которые  сами себя описывают.  Рекомендуется выбирать  названия,  основываясь на со- глашении об именовании пакетов в Java.

сategory. Использует атрибут android:name, чтобы указать, при каких обстоятельствах должно обслуживаться действие. Каждый тег intent-filter способен содержать  несколько  тегов category. Вы можете задать собственные  категории  или же брать стандартные значения, предоставляемые системой.

§ ALTERNATIVE. Наличие данной категории говорит о том, что дей- ствие должно быть доступно в качестве альтернативного тому, ко- торое выполняется по умолчанию для элемента этого типа данных. Например, если действие по умолчанию для контакта — просмотр, то в качестве альтернативы его также можно редактировать.

§ SELECTED_ALTERNATIVE. То же самое, что и ALTERNATIVE, но вместо одиночного действия с использованием утверждения На- мерения, которое описано выше, применяется в тех случаях, когда нужен список различных возможностей. Одной из функций Филь- тра намерений может стать динамическое  заполнение  контекстного меню с помощью действий.  Данный  процесс продемонстрирован далее в этой главе.

§ BROWSABLE. Говорит о том, что действие доступно из браузера.

Когда Намерение срабатывает в браузере, оно всегда содержит дан-

ную категорию. Если вы хотите, чтобы приложение реагировало на действия, инициированные браузером (такие как перехват ссылок на конкретный сайт), то должны добавить в его манифест категорию BROWSABLE.

§ DEFAULT. Установите эту категорию,  чтобы сделать компонент обработчиком по умолчанию для действия, выполняемого с указан- ным типом данных внутри Фильтра намерений. Это необходимо и для Активностей, которые запускаются с помощью явных Намерений.

§ GADGET. Наличие этой категории  указывает  на то, что данная

Активность может запускаться внутри другой Активности.

§ HOMEУстанавливая эту категорию и не указывая при этом дей- ствия,  вы создаете  альтернативу для  стандартного  домашнего экрана.

§ LAUNCHER. Используя эту категорию, вы помещаете Активность

в окно для запуска приложений.

data. Этот тег дает возможность указать тип данных, с которым может взаимодействовать ваш компонент. При необходимости можно задать несколько тегов data. Чтобы указать, какие именно данные поддержи- вает ваш компонент, используйте сочетание следующих атрибутов:

§ android:host — задает доступное имя удаленного  сервера (на- пример, google.com);

§ android:mimetype — позволяет  указать тип данных, которые ваш компонент способен обрабатывать. Для примера: <type android: value="vnd.android.cursor.dir/*"/> будет соответствовать любому Курсору в Android;

§ android:path — задает доступные  значения  для пути URI  (на- пример, /transport/boats/);

§ android:port — указывает  доступные порты для заданного сер- вера;

§ android:scheme — требует указать конкретную схему (например,

content или http).

В листинге 5.7 показан Фильтр намерений для Активности, которая может вы- полнять SHOW_DAMAGE либо как главное, либо как альтернативное дей- ствие (данные о землетрясениях вы научитесь получать в следующей главе).

Листинг 5.7. Регистрация Активности в качестве Приемника намерений

<activity android:name=".EarthquakeDamageViewer" android:label="View

Damage">

<intent-filter>

<action android:name="com.paad.earthquake.intent.action.SHOW_ DAMAGE"></action>

<category android:name="android.intent.category.DEFAULT"/>

<category android:name="android.intent.category.SELECTED_ ALTERNATIVE"/>

<data android:mimeType="vnd.earthquake.cursor.item/*"/>

</intent-filter>

</activity>

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

По теме:

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