Что такое интент в андроиде

Руководство Android Intents

View more Tutorials:

1- Что такое Intent?

Что такое интент в андроиде. Смотреть фото Что такое интент в андроиде. Смотреть картинку Что такое интент в андроиде. Картинка про Что такое интент в андроиде. Фото Что такое интент в андроиде

intent это объект класса android.content.Intent. Ваш код можно отправить на Intent в систему Android с определением компонентов, которые вы хотите достичь.

Например, через startActivity(), вы сможете дать определение Intent который использвует для вызова другого Activity. В целевом Activity через метод startActivity() вы сможете определить намерение отправителя вызвать данный (start) Activity.

Intent может содержать данные через Bundle. Данные могут использоваться принимающим компонентом.

2- Вилы Intent

Android поддерживает 2 вида Intent это явные (explicit) Intent và и неявные (implicit) Intent.

Приложение может определить целевой компонент непосредственно Intent (явное намерение) или запросить систему Android оценить загистрированные компоненты основываясь на намерения данных (неявные Intent).

3- Явный Intent

4- Фильтр Intent (Intent Filter)

Что такое интент в андроиде. Смотреть фото Что такое интент в андроиде. Смотреть картинку Что такое интент в андроиде. Картинка про Что такое интент в андроиде. Фото Что такое интент в андроиде

5- Неявный Intent

Что такое интент в андроиде. Смотреть фото Что такое интент в андроиде. Смотреть картинку Что такое интент в андроиде. Картинка про Что такое интент в андроиде. Фото Что такое интент в андроиде

View more Tutorials:

Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.

Источник

Некоторые возможности использования Intent’ов

Что такое интент в андроиде. Смотреть фото Что такое интент в андроиде. Смотреть картинку Что такое интент в андроиде. Картинка про Что такое интент в андроиде. Фото Что такое интент в андроиде

Введение

Объекты типа Intent могут быть использованы для общения между отдельными частями Android приложения, либо между различными приложениями системы. Мощь механизма интентов заключается в том, что с его помощью можно обращаться к любому установленному в системе приложению. Это позволяет повторно использовать некоторые компоненты и значительно сократить время на разработку.

В этой статье я покажу некоторые возможности использования класса Intent для обращения к системным приложениям.

Итак, что можно сделать с помощью Intenta:

1. Позвонить

Необходимо также добавить разрешение совершать звонки:

Либо разрешение для экстренных вызовов:

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

2. Отправить смс

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

3. Получить контакт из телефонной книги

Этот код откроет стандартное приложение контактов. Метод startActivityForResult позволяет получить uri выбранного контакт из параметра Intent data переопределенного метода onActivityResult.

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

Для чтения списка контактов необходимо также добавить в манифест разрешение:

4. Открыть ссылку в браузере

Данный код откроет переданную в параметре ссылку в одном из установленных браузеров. При этом пользователь сможет сам выбрать браузер для просмотра. Eсли ссылка ведет на YouTube, то можно сразу открыть видео стандартным YouTube приложением.
С помощью этого интента можно также открыть стандартный клиент Android Market с ссылкой на какое-либо приложение. Для этого необходимо в параметр uri передать ссылку вида market://search?q=search query, где search query необходимо заменить соответствующим поисковым запросом.
Разрешения на интернет указывать не нужно, т.к. сеть используется не напрямую, а через приложение браузер.

5. Расшарить контент/написать письмо

Интенту можно задать тему и текст контента, который необходимо разшарить. Метод Intent.createChooser() создает диалог выбора соответствующего приложения.
Если необходимо разшарить медиа контент (изображение/видео), то нужно указать соответствующий тип контента в методе setType, например mailIntent.setType(«image/png»);, а также добавить сам контент в extra интента:

С помощью этого интента можно также отправить электронную почту по конкретному адресу:

6. Открыть карту по определенным координатам либо запросу
7. Сделать снимок с камеры

Этот код запускает стандартное приложение камеры. Полученное с камеры изображение можно обработать в методе onActivityResult:

Изображение, полученное с камеры при этом можно сохранить в конкретной директории, добавив параметр в интент:

Для использования этого интента не нужно разрешения android.permission.CAMERA, т.к. камера используется не напрямую, а всего лишь вызывается встроенное приложение камеры. Однако рекомендуется добавить в AndroidManifest следующую строку:

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

8. Позвонить какому-либо контакту через Skype

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

Этот метод проверяет в системе наличие приложения, способного ответить на конкретный интент. С использованием этого метода код звонка через скайп будет выглядеть следующим образом:

Более простым методом проверки наличия приложения в системе является перехват ActivityNotFoundException, которое будет вылетать в методе startActivity. Однако это позволит всего лишь среагировать на проблему, но не предотвратить ее. Например, используя вышеприведенный метод isIntentAvailable можно вовремя сделать соответствующий контрол неактивным, либо перенаправить пользователя на Android Market для установки соответствующего приложения.

9. Использовать Speech to Text для распознавания голоса

Этот код запускает приложение распознавания речи. Если произнести что-либо, система обработает голос и вернет результат в метод onActivityResult:

Источник

Intent (Намерение)

Общее

Но это не единственный вариант использования намерения. Также можно использовать для объявления о запуске активности или сервиса, направленных на выполнение каких-либо действий (как правило, речь о работе с определенной частью данных) или для передачи уведомлений о том, что произошло некое событие (или действие).

Намерения могут применяться для трансляции сообщений по системе. Любое приложение способно зарегистрировать широковещательный приёмник и отслеживать эти намерения с возможностью на них реагировать. Это позволяет создавать приложения, использующие событийную модель, в основе которой лежат внутренние, системные или сторонние события, передаваемые внешними программами.

Android транслирует намерения для объявления о системных событиях, например об изменениях в состоянии сетевого подключения или в уровне заряда батареи. Системные приложения в Android, такие как программы дозвона или управления SMS, регистрируют компоненты, отслеживающие заданные намерения, например входящий звонок или получено новое SMS-сообщение, и соответствующим образом реагируют на них.

Явные намерения

Вспомним код для перехода на вторую активность в своём приложении:

В намерении мы явно указали имя класса активности во втором параметре. Данный класс у нас прописан в манифесте, и система, просматривая манифест, запустит нужную активность. Вот почему у нас сначала программа завершалась с ошибкой. Когда мы создали класс, но не прописали его в манифесте, то система не понимала, чего от неё хотят.

Первый параметр – это Context. Активность является подклассом Context, поэтому мы можем использовать её как HelloWorld.this, или укороченную запись this.

Таким образом, ваше приложение может иметь десять активностей, и вы можете вызвать любую из них, зная её имя класса. Это явный вызов, где вы явно указываете имя класса для запуска.

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

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

По похожему сценарию можно передать простые типы и строки.

При работе с действиями, возвращающими данные, нельзя использовать метод startActivity(), поскольку он не возвращает результат. Если вы хотите вернуть данные, то можете использовать метод startActivityForResult(), приспособленный для работы с обратными вызовами.

Неявные намерения

Существует также неявный вызов активности. В этом случае при создании намерения мы используем не имя класса, а указываем параметры action, data, category с определёнными значениями. Система анализирует, что мы тут такого понаписали и начинает подбирать подходящий вариант для запуска. Например, если указали в параметрах адрес веб-страницы, то скорее всего хотим запустить браузер и почитать новость, что Кот Ларри уволен с поста «главного мышелова» резиденции британского премьера (нехороший премьер-министр, пусть только в Москву сунется).

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

К слову сказать, мы тоже можем прописать в своей активности в фильтрах намерений (Intent Filter) набор тех же параметров: action, data, category. И тогда у пользователя может запуститься не только стандартный браузер, но и наша программа (Кот Матроскин в таких случаях говорил: Подумаешь, я еще и вышивать могу. и на машинке тоже..).

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

Неявные намерения — это механизм, позволяющий запрашивать анонимные компоненты приложений с помощью действий. Вы можете попросить систему запустить активность, выполняющую заданное действие, не зная ничего ни о самой активности, ни о её приложении. Например, мы указываем телефонный номер, но понятия не имеем, как программой дозвона пользуется пользователь на своём телефоне. Но это уже не наша проблема, пусть пользователь сам выбирает, как ему звонить по номеру, который мы можем ему предоставить.

Создавая новое неявное намерение для передачи в метод startActivity(), необходимо назначить действие, которое должно выполниться, а также при желании указать вспомогательный путь URI к тем данным, что нужно обработать. Вы также можете передать дополнительные данные в другую активность, используя параметр намерения extras.

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

Простой пример создания намерения с предопределённым действием ACTION_VIEW для запуска браузера и перехода на нужный адрес:

В данном случае действие ACTION_VIEW означает просмотр чего-либо. Мы указали нужные данные (адрес), и происходит запуск новой активности (браузера). При этом исходная активность приостанавливается и переходит в фоновый режим. Когда пользователь нажимает на кнопку Back, то он возвращается к исходной активности. Обратите внимание, что мы нигде не указываем конкретную программу-браузер типа Chrome, Opera и т.п.

В каждом случае Android находит соответствующую активность, чтобы ответить на намерение, инициализируя её в случае необходимости.

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

Раньше я писал код без условия if и это было рабочим решением. Но следует помнить, что нет никакой гарантии, что приложение, способное обработать ваше намерение, будет установлено и доступно на устройстве. Конечно, вероятность того, что у пользователя не будет звонилки, достаточна низка. А если приложение установлено на планшете без телефонного модуля? А если появятся холодильники или стиральные машины с Android на борту? Чтобы узнать, будет ли запущена активность для вашего намерения, можно отправить запрос Менеджеру пакетов при помощи метода resolveActivity(). Поэтому в примере выше пришлось поставить дополнительную проверку. Желательно делать такую проверку во всех примерах, где-то я мог просто пропустить старый код.

Объект Intent содержит информацию, представляющую интерес для компонента, который получает намерение, и данные, которые передаются этому компоненту. Кроме того, объект Intent содержит информацию, представляющую интерес для системы Android, — имя компонента, который должен обработать намерение и набор параметров запуска этого компонента. Как правило, объект Intent может содержать следующие поля:

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

Константы действия

Константы категорий

Методы

Для работы с категориями в классе Intent определена группа методов:

Фильтры намерений и запуск заданий

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

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

В фильтре намерений декларируется только три составляющих объекта Intent: действие, данные, категория. Дополнения и флаги не играют никакой роли в принятии решения, какой компонент получает намерение.

Например, в любом приложении есть главная активность, которая устанавливается как точка входа для задания:

Внутри узла Фильтра намерений можно использовать такие теги (и соответствующие атрибуты).

Принцип работы фильтров намерений

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

Поиск и использование намерения, с помощью которого была запущена активность

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

Используйте метод getIntent() (как правило, внутри метода onCreate()), чтобы извлечь намерение, с помощью которого компонент запущен.

Применяйте методы getAction() и getData(), чтобы найти действие и данные, связанные с намерением. Для извлечения дополнительной информации, хранящейся в параметре extras, используйте типизированные методы get Extra.

Делегирование ответственности

Задействуйте метод startNextMatchingActivity() для делегирования ответственности за обработку действия следующему компоненту, который лучше всего для этого подходит.

Это позволяет добавлять дополнительные условия для компонентов, которые ограничат сферу их применения рамками утверждения Намерений. В некоторых случаях ваш компонент может выполнить некоторые операции или предложить пользователю выбор, прежде чем передать Намерение другому компоненту.

ACTION_PICK

Принцип ACTION_PICK заключается в том, чтобы запустить активность, отображающую список элементов. После этого активность должна предоставлять пользователю возможность выбора элемента из этого списка. Когда пользователь выберет элемент, активность возвратит URI выбранного элемента вызывающей стороне. Таким образом, можно многократно использовать функцию UI для выбора нескольких элементов определённого типа.

Следующий код выведет диалоговое окно со списком всех возможных программ, которые могут запустить активность с данными, так как мы не указываем конкретный тип (setType(«*/*»)):

Если мы укажем конкретный тип данных, которые нас интересует, то список программ существенно сузится. Например, если указать intent.setType(«image/*»);, то можем увидеть только системную программу Галерея для просмотра картинок (у пользователя могут быть установлены программы, которые также предназначены для просмотра картинок, поэтому список может отличаться).

ACTION_SEND

Очень распространённое намерение. Используйте метод setType(), чтобы указать тип MIME для передаваемых данных. Эти данные должны храниться в параметре намерения extras с ключами EXTRA_TEXT или EXTRA_STREAM, в зависимости от типа. В случае с электронной почтой стандартное приложение в Android также принимает дополнительные параметры по ключам EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC и EXTRA_SUBJECT.

Если есть установленное приложение с фильтром, который соответствует ACTION_SEND и MIME-типу text/plain, система Android запустит его, а если будет найдено более одного приложения, то система отобразит диалог выбора, который позволяет пользователю выбрать приложение.

Если ваша активность хочет обрабатывать подобные намерения, то она должна содержать следующие данные:

Имя сообщает Android, что активность может обрабатывать ACTION_SEND.

Фильтр должен включать категорию DEFAULT, в противном случае он не сможет получать неявные намерения.

Указываем типы данных, которые могут обрабатываться активностью.

ACTION_GET_CONTENT

Выбрать файл

Если вы не хотите писать собственный менеджер файлов, а готовы использовать готовые приложения для выбора файла, то можете использовать следующий код:

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

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

Диалоговое окно выбора

При выборе из списка программ пользователь может выбрать программу по умолчанию, которая будет автоматически запускаться при выбранном намерении. В этом случае диалоговое окно выводиться не будет. Но можно принудительно выводить диалоговое окно при помощи метода createChooser() и пользователю придётся каждый раз выбирать нужную активность:

Если на устройстве не будет подходящих активностей для запуска, то createChooser() обработает данную ситуацию и выведет соответствующее сообщение. В этом заключается его преимущество. Если передать методу startActivity() намерение, для которого не найдётся подходящей активности, то возникнет исключение ActivityNotFoundException. И вам придётся перехватывать его в блоке try/catch, чтобы избежать аварийного завершения приложения.

Android 12

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

Другие примеры использования намерений

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

Источник

Объект намерения Intent

При рассмотрении жизненных циклов двух активностей был использован объект Intent. С помощью данного объекта выполнялся переход из одной активности в другую и обратно. В данной статье рассматривается объект намерений Intent.

Intent представляет собой объект описания операции, которую необходимо выполнить через систему Android. Т.е. необходимо сначала описать некоторую операцию в виде объекта Intent, после чего отправить её на выполнение в систему вызовом одного из методов активности Activity.

Объекты Intent в основном используются в трёх операциях :

1. Старт операции
В android-приложении один экран представлен компонентом Activity, описанном в файле манифеста. Если необходимо в приложении иметь несколько экранов (страниц/форм), то все они должны быть зарегистрированы в манифесте приложения. Переход от одной активности к другой выполняется с помощью объекта Intent, который передается методу startActivity(). Объект Intent наряду с описанием операции может дополнительно включать все необходимые данные для выполнения операции.

Если необходимо получить результат выполнения операции, то следует использовать метод startActivityForResult(), который вернет отдельный объект Intent в обратном вызове метода onActivityResult().

2. Запуск сервиса
Android-приложение может выполнять действия в фоновом режиме без пользовательского интерфейса с помощью определенного сервиса, в качестве которого используется компонент Service. Сервис можно стартовать для выполнения какого-либо действия, например, чтение файла. Для старта сервиса необходимо вызвать метод активности startService() и передать ему объект Intent.

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

3. Рассылка широковещательных сообщений
Широковещательное сообщение может принимать любое приложение android. Система генерирует различные широковещательные сообщения о системных событиях, например, зарядка устройства. Широковещательные сообщения отправляются другим приложениям передачей объекта Intent методам sendBroadcast(), sendOrderedBroadcast() или sendStickyBroadcast().

Типы объектов Intent

Существует два типа объектов Intent : явные и неявные.

Явные объекты Intent

В качестве первого параметра конструктора Intent указывается Context. Поскольку активность является наследником Context, то можно использовать укороченную запись this или полную как Class_name.this. Во втором параметре конструктора указывается наименование класса активности. Этот класс зарегистрирован в манифесте приложения. Таким образом, приложение может иметь несколько активностей, каждую из которых можно вызвать по наименованию класса. После вызова метода startActivity будет создана новая активность, которая запустится или возобновит свою работу, переместившись на вершину стека активностей.

Пример старта сервиса

Если в приложении был создан какой-либо сервис, например ServiceDownload для загрузки файлов из Интернета, то для запуска этого сервиса можно использовать следующий код :

Неявные объекты Intent

Неявные объекты Intent не содержат имени конкретного класса. Вместо этого они включают действие (action), которое требуется выполнить. Неявный Intent может включать дополнительно наименование категории (category) и тип данных (data). Такой набор параметров позволяют компоненту из другого приложения обработать этот запрос. Например, если необходимо пользователю показать место на карте, то с помощью неявного объекта Intent можно попросить это сделать другое приложение, в котором данная функция предусмотрена.

Когда android получает неявный объект Intent для выполнения, то система ищет подходящие компоненты путем сравнения содержимого Intent с фильтрами Intent других приложений, зарегистрированных в файлах манифестов. Если параметры объекта Intent совпадают с параметрами одного из фильтров Intent, то система запускает этот компонент и передает ему объект Intent. При наличии нескольких подходящих фильтров система открывает диалоговое окно, где пользователь может выбрать подходящее приложение.

Фильтр Intent представляет собой секцию в файле манифеста приложения, описывающее типы объектов Intent, которые компонент мог бы выполнить. Таким образом, наличие фильтра Intent в описании активности в манифесте позволяет другим приложениям напрямую запускать данную операцию с помощью некоторого объекта Intent. Если фильтр Intent не описан, то операцию можно будет запустить только с помощью явного объекта Intent.

Механизм использования неявных объектов Intent для вызова компонентов других приложений напоминает вызовы API. Основное отличие между вызовами компонентов и вызовами API заключается в том, что вызовы компонентов с помощью неявных Intent являются асинхронными, а API-вызовы являются синхронными. Привязка API-вызовов выполняется на этапе компиляции, тогда как вызовы неявных намерений являются привязкой ко время выполнения. Намерение, которое работает синхронно и имеет привязку к конкретной активности, становится явным.

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

Фильтры намерений Intent

В секциях фильтров намерений в файле манифеста можно объявить только три составляющих объекта Intent : действие, данные, категория. Рассмотрим пример описания фильтров намерений для приложения работы с социальными сетями.

Вторая активность (ShareActivity) предназначена для упрощения обмена текстовым и мультимедийным контентом. Несмотря на то, что пользователи могут входить в эту активность из MainActivity, они также могут открыть ShareActivity напрямую из другого приложения, которое создаст неявный объект Intent, соответствующий одному из двух фильтров Intent.

Действие намерения, action

Действие action объекта Intent определяет, что нужно выполнить, например просмотр фото (view) или выбор фото (pick). В значительной степени действие определяет, каким образом описана остальная часть намерения Intent, в частности, что именно содержится в разделе данных. Действие для объекта Intent можно указать методом setAction() или определить в конструкторе Intent. Если Вы определяете собственные действия, то необходимо использовать наименование пакета приложения. Например :

Рассмотрим простой пример формирования неявного намерения для открытия определенной страницы сайта :

В данном примере создается намерение с действием ACTION_VIEW, означающим просмотр чего-либо. При вызове данного намерения текущая активность приостанавливает своё действие и переходит в фоновый режим. При нажатии пользователем кнопки Back исходная активность восстанавливется. Некоторые константные значения действий, используемые в java-коде, представлены в следующей таблице :

ACTION_ANSWERОткрывает активность, связанную с входящими звонками.
ACTION_CALLОткрывает активность, инициализирующую обращение к телефону.
ACTION_HEADSET_PLUGПодключение наушников.
ACTION_SENDВызов активности для отправки данных, указанных в намерении. Получатель должен быть определен с помощью полученной активности. Для указания типа передаваемых данных MIME используйте метод setType. Данные передаются параметром намерения extras с ключами EXTRA_TEXT или EXTRA_STREAM в зависимости от типа. При использовании электронной почты стандартное приложение принимает дополнительные параметры по ключам EXTRA_EMAIL, EXTRA_CC, EXTRA_BCC и EXTRA_SUBJECT.
Действие ACTION_SEND следует использовать только в тех случаях, когда данные необходимо передать удаленному адресату, а не другой программе на том же устройстве.
ACTION_SENDTOОткрывает активность для отправки сообщений контакту, указанному в пути URI, который определяется в намерении.
ACTION_VIEWНаиболее распространенное общее действие просмотра чего-либо. Выбор приложения зависит от схемы (протокола) данных : стандартные адреса http будут открывать браузер, адреса tel вызовут приложение для дозвона, geo откроет программу Google Maps, а данные с контактами откроют приложении для управления контактной информацией.
ACTION_WEB_SEARCHОткрывает активность поиска информации в интернете, основываясь на передаваемых данных с помощью пути URI; как правило, при этом запускается браузер.

Действие, определяемое в манифесте, включает наименование пакета и не используют префикс «ACTION_», например, «android.intent.action.SEND». С другими константными действиями можно познакомиться в справочнике Intent.

Категория намерения, category

Категория – это строка, содержащая дополнительные сведения о том, каким компонентом должна выполняться обработка объекта Intent. В объект Intent можно поместить любое количество категорий. Однако большинству объектов Intent описание категории не требуется.

Класс Intent для работы с категориями имеет группу методов :

При описании категории в файле манифеста используются стандартные значения, предоставляемые системой :

BROWSABLEОперация стартует веб-браузер для отображения данных, указанных по ссылке (url), например, изображение или сообщение электронной почты.
LAUNCHERОперация (активность) является начальной операцией задачи. Активность с данной категорией помещается в окно для запуска приложений.
DEFAULTДанная категория позволяет объявить компонент обработчиком по умолчанию для действия, выполняемого с указанным типом данных внутри фильтра намерений.
HOMEАктивность с данной категорией отображает главный экран (Home Screen), который открывается после включения устройства и загрузки системы, или когда нажимается клавиша HOME.

Константные наименования категории, используемые в java-коде, имеют префикс «CATEGORY_». С другими константными категориями можно познакомиться в справочнике Intent.

Данные намерения

При создании объекта Intent в некоторых случая необходимо определить данные (data). Например, для действия ACTION_EDIT, данные должны включать URI документа, который требуется отредактировать. Объект Uri ссылается на данные и/или тип этих данных MIME. Так, например, операция, которая выводит на экран изображения, скорее всего, не сможет воспроизвести аудио/видео файл, даже если и у тех, и у других данных будут одинаковые форматы URI. Поэтому указание типа данных MIME помогает системе Android найти наиболее подходящий компонент для выполнения объекта Intent.

Чтобы задать только URI данных, используйте метод setData(). Чтобы определить только тип MIME, вызовите setType(). При необходимости определения обоих параметров можно вызвать метод setDataAndType().

Примечание : чтобы определить URI и тип MIME следует использовать метод setDataAndType(). Не вызывайте методы setData() и setType() поочередно, поскольку каждый из этих методов аннулирует результат выполнения другого.

В файле манифеста наряду с фильтрами намерений Intent настраиваются и другие параметры приложения. О том, как настроить атрибут configChanges, чтобы приложение реагировало на изменение ориентации устройста (portrait|landscape) или на изменение размера экрана можно прочитать здесь.

Дополнительные данные

Данные, содержащие дополнительную информацию, необходимую для выполнения запрошенного действия, определяются в виде пары «ключ-значение». Добавлять дополнительные данные можно с помощью различных методов putExtra(), каждый из которых принимает два параметра : имя и значение ключа. Также можно создать объект Bundle с дополнительными данными и вставить его в Intent с помощью метода putExtras(). Например, для отправки сообщения электронной почты адрес получателя можно указать с помощью ключа EXTRA_EMAIL, а тему сообщения ― с помощью ключа EXTRA_SUBJECT.

Класс Intent имеет несколько констант EXTRA_* для стандартных типов данных. Если необходимо использовать собственные дополнительные ключи для объектов Intent, которые принимает только ваше приложение, обязательно указывайте в качестве префикса имя пакета своего приложения. Например :

Определение намерения, запустившего активность

При старте активности с помощью неявного намерения необходимо определить действие, которое следует выполнить, и данные для этого действия. Метод getIntent активности позволяет получить объект намерения :

Методы getAction() и getData() позволяют определить действие и данные, связанные с намерением. Для получения дополнительной информации, хранящейся в параметре extras, используйте типизированные методы get Extra.

Источник

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

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