Интенты Среди прочих действий в наборе разработчика скриптов есть действие под названием «Intent». В справке написано, что эта штука позволяет скрипту отправлять какие-то сигналы внутри вашего девайса какому-либо приложению или сервису.

Что же это за зверь такой, как его приручить и чем он может быть нам полезен — в нашей новой статье.

Внимание! Быть хакером вовсе необязательно. После прочтения этой статьи вы им обязательно станете.

Что такое интенты

По сути интент — это просто сигнал, который одно приложение под андроидом может послать другому. Другими словами, это сообщение в одну сторону от приложения к приложению. Обратной связи интент не имеет.

Для чего они?

Интент — это чуть ли не основной способ взаимодействия андроид приложений между собой. По сути, даже внутри одного приложения используются именно интенты, чтобы передать информацию от одного компонента к другому.

Например самое простое применение — запустить другое приложение. Или открыть определенную ссылку.

Посложнее — заставить другое приложение сделать что-то определенное. Например — проложить маршрут в навигаторе. Или заказать такси.

Что нужно знать?

посылкаИнтент — это что-то типа посылки. У интента может быть определенный «адрес», а может и не быть. Могут быть какие-то параметры, тип и так далее.

Но самое главное — у любого интента обязано быть действие (action).

Интент без действия — бессмысленен. Именно действие говорит получателю интента, что с ним нужно делать.

Еще один важный момент — каждый интент может быть получен только одним приложением (если это не широковещательное сообщение broadcast). То есть если наш ассистент посылает интент, то его получит только одно приложение.

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

А чтобы отправить интент только одному строго определенному приложению, в его данных нужно указать свойство package — пакет того приложения, которому мы хотим его отправить. Пакет можно получить просто — на странице приложения в Google Play это значение можно видеть в адресной строке — параметр id.

И самое важное

Если приложение не умеет принимать интент, то нет толку посылать его.

Как понять, что приложение умеет принимать интент? Нужно заглянуть в его манифест. Например с помощью приложения Manifest Viewer

Как же это использовать?

Открыть какую-то ссылку в браузере, заставить навигатор построить маршрут, показать место в приложении карт, запустить определенный трек в плеере — вот самые простые примеры использования интентов.

Чтобы это сделать из вашего скрипта, сперва нужно четко понимать, какое действие должно выполнить стороннее приложение и умеет ли оно его выполнять.

Действие — это просто строка. Список стандартных действий можно найти в документации Android по интентам.

Важно понимать, что стандартными действиями дело не ограничивается. Приложение может по своему усмотрению обрабатывать какое-нибудь свое действие.

Пример — скрипт «Музыка Вконтакте». Приложение Katemobile обрабатывает широковещательный интент с действием VK_MUSIC_PLAY_ALL или VK_MUSIC_PLAY_SEARCH.

Тип интента

Еще его называют Target. Тип определяет, что за интент вы посылаете. Есть несколько строго фиксированных типов — активность (Activity), сервис (Service) и широковещательный интент (broadcast).

Активность обозначает, что в результате интента должно открыться приложение.

Сервис означает, что интент принимает какой-то фоновый процесс стороннего приложения. Он тоже может в результате открыть интерфейс приложения, но не обязательно.

Широковещательный интент отправляется сразу всем приложениям, которые умеют его обрабатывать (если не указан package). Интерфейс при этом как и в случае сервиса может не открываться.

MIME type и Data

Data — это опциональный параметр, содержащий некую ссылку, которую нужно обработать. Например, чтобы открыть какую-то ссылку в браузере, нужно указать ее именно в параметре data.

То есть это некоторый URL, содержащий необходимые данные для интента.

MIME type говорит приложению, что за тип данных нужно обработать по этому URL. Необязательный параметр.

Package

Пакет приложения. Если указать в интенте пакет, то интент будет отправлен только этому приложению принудительно.

Параметры

Еще их называют Extras. Это пары имя-значение, если нужно передать какие-то данные приложению. Чем-то перекликаются с data, но в data нужна именно ссылка, а здесь набор параметров.

Где взять примеры?

Хорошим примером для понимания, что такое интент, является конечно же документация по Android.

Например здесь можно увидеть примеры использования интентов стандартных типов для установки будильника, поиска адресов и тому подобных действий.

Примерами скриптов, использующих интенты, являются «Музыка ВКонтакте», «Интернет радио и телеканалы», «Яндекс такси» и все остальные скрипты, которые что-то делают с использованием сторонних программ.

И напоследок

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

Тот же «Яндекс такси» нигде не пишет, что за параметры нужно передать ему в интенте, чтобы приложение смогло автоматически рассчитать стоимость поездки и показать экран со всеми заполненными полями и кнопкой «Заказать такси».

Но это не всегда удается сделать. Если уж приложение не принимает никаких сигналов в виде интетов от сторонних программ, то интеграция невозможна.

7 thoughts on “Интенты — инструмент настоящего хакера

  1. Спасибо за разъяснение, но интенты для Дуси которые выложены на 4пда не работают уже?

      1. Пытаюсь с таскера вызвать Дусю с включеным микрофоном, но она нереагирует. До 1.5 все работало, по этому и спрашиваю.

  2.  всегда будет работать что-то одно, но что — неизвестно. чем точнее шаблон соответствует фразе — тем выше он ранжируется?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *