Kwert-soft.ru

IT Софт для ПК
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Java android intent

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

Введение

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

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

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

1. Позвонить

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

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

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

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

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

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

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

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

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

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

Данный код откроет переданную в параметре ссылку в одном из установленных браузеров. При этом пользователь сможет сам выбрать браузер для просмотра. Eсли ссылка ведет на YouTube, то можно сразу открыть видео стандартным YouTube приложением.
С помощью этого интента можно также открыть стандартный клиент Andro > Разрешения на интернет указывать не нужно, т.к. сеть используется не напрямую, а через приложение браузер.

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

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

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

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

Uri при этом можно модифицировать, указывая другие параметры:

  • geo:latitude,longitude
  • geo:latitude,longitude?z=zoom Параметр z — уровень зума при отображении карты (от 0 до 23)
  • geo:0,0?q=my+street+address
  • geo:0,0?q=business+near+city

7. Сделать снимок с камеры

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

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

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

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

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

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

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

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

Читать еще:  Javascript работа с api
9. Использовать Speech to Text для распознавания голоса

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

Полный список

— разбираемся в коде урока 21
— теория по Intent и Intent Filter
— немного о Context

На прошлом уроке (№ 21) мы создали приложение, которое содержит два Activity. Напомню, что для создания Activity, необходимо:
создать класс, с суперклассом android.app.Activity
создать Activity-запись в манифесте и указать ей созданный класс в поле Name

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

Мы использовали объект Intent. О нем можно почитать здесь, здесь и здесь. Правда инфа достаточно сложна для понимания с нуля. Я попробую своими словами объяснить.

Что такое Intent

В нашем случае Intent – это объект, в котором мы прописываем, какое Activity нам необходимо вызвать. После чего мы передаем этот Intent-объект методу startActivity, который находит соответствующее Activity и показывает его. При создании Intent мы использовали конструктор Intent (Context packageContext, Class cls) с двумя параметрами.

Первый параметр – это Context. Если помните, когда мы программно создавали View в одном из прошлых уроков, мы тоже использовали в конструкторах объект Context. Activity является подклассом Context, поэтому мы можем использовать ее – this. Вкратце, Context – это объект, который предоставляет доступ к базовым функциям приложения таким как: доступ к ресурсам, к файловой системе, вызов Activiy и т.д. Я думаю, в дальнейшем мы рассмотрим примеры, где явно увидим, зачем Context передается и как используется.

Второй параметр – имя класса. Напомню, что при создании записи Activity в манифест-файле мы указываем имя класса. И теперь если мы укажем тот же класс в Intent – то система, просмотрев манифест-файл обнаружит соответствие и покажет соответствующий Activity.

В этом можно легко убедиться. Мы удалим запись об Activity из манифест-файла и попробуем его после этого вызвать. Откройте проект из прошлого урока P0211_TwoActivity, откройте манифест-файл, вкладка Application и удалите запись об ActivityTwo с помощью кнопки Remove. Сохраните все, запустите приложение и попробуйте вызвать Activity кнопкой “Go to Activity Two”. Приложение выдаст ошибку. Если посмотреть логи, то видим следующий текст:

ERROR/AndroidRuntime(367): android.content.ActivityNotFoundException: Unable to find explicit activity class ; have you declared this activity in your AndroidManifest.xml?

(Логи — вкладка LogCat в Eclipse. Если не видно такой, то идем в меню Window -> Show View -> Other, папка Android -> LogCat )

Система говорит нам, что не нашла такого Activity класса и любезно подсказывает, что, возможно, он не прописан в манифест-файле. Снова пропишите Activity в манифест-файле, все сохраните и запускайте. Теперь должно работать.

Явный вызов

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

Здесь мы создаем Intent, в качестве параметра передаем ему класс Class_B. Далее вызываем метод startActivity с созданным Intent в качестве параметра. Метод проверяет AndroidManifest на наличие Activity связанной с классом Class_B и если находит, то отображает. Все это в пределах одного приложения.

Неявный вызов

Существует также неявный вызов Activity. Он отличается тем, что при создании Intent мы используем не класс, а заполняем параметры action, data, category определенными значениями. Комбинация этих значений определяют цель, которую мы хотим достичь. Например: отправка письма, открытие гиперссылки, редактирование текста, просмотр картинки, звонок по определенному номеру и т.д. В свою очередь для Activity мы прописываем Intent Filter — это набор тех же параметров: action, data, category (но значения уже свои — зависят от того, что умеет делать Activity). И если параметры нашего Intent совпадают с условиями этого фильтра, то Activity вызывается. Но при этом поиск уже идет по всем Activity всех приложений в системе. Если находится несколько, то система предоставляет вам выбор, какой именно программой вы хотите воспользоваться. Схематично это можно изобразить так:

Читать еще:  Java lang arrayindexoutofboundsexception 0

В Application_1 создается Intent, заполняются параметры action, data, category. Для удобства, получившийся набор параметров назовем Param_C. С помощью startActivity этот Intent отправляется на поиски подходящей Activity, которая сможет выполнить то, что нам нужно (т.е. то, что определено с помощью Param_C). В системе есть разные приложения, и в каждом из них несколько Activity. Для некоторых Activity определен Intent Filter (наборы Param_A, Param_B и т.д.), для некоторых нет. Метод startActivity сверяет набор параметров Intent и наборы параметров Intent Filter для каждой Activity. Если наборы совпадают (Param_C для обоих), то Activity считается подходящей.

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

Например, если в системе установлено несколько музыкальных плееров, и вы запускаете mp3, то система выведет вам список Activity, которые умеют играть музыку и попросит выбрать, какое из них использовать. А те Activity, которые умеют редактить текст, показывать картинки, звонить и т.п. будут проигнорированы.

Если для Activity не задан Intent Filter (Activity_24 на схеме), то Intent с параметрами ему никак не подойдет, и оно тоже будет проигнорировано.

Если проводить аналогии — можно сравнить Intent с ключом, а Intent Filter с замкОм, за которым сидит прекрасное Activity )))

Мы будем постепенно узнавать нюансы этого механизма и значения которыми заполняются параметры action, data и category в Intent и Intent Filter. Сейчас важно понять, что в случае неявного вызова одно приложение посылает Intent, а все другие сверяют его параметры со своими Activity -> Intent Filter. Intent – это базовое понятие системы Android и без него нам никуда. Оно применяется не только для Activity. Но об этом позднее.

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

На следующем уроке:

— Activity LifeCycle – поведение Activity при создании, вызове, закрытии

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Java android intent

Intents are used generally for starting a new activity using startActivity().

Use of Intent

  1. For Launching an Activity
  2. To start a New Service
  3. For Broadcasting Messages
  4. To Display a list of contacts in ListView

Types of Intent in Android

Intent is of two types:

  1. Implicit Intent
  2. Explicit Intent

Implicit Intent

The implicit intent is the intent where instead of defining the exact components, you define the action that you want to perform for different activities.

An Implicit intent specifies an action that can invoke any app on the device to be able to perform an action. Using an Implicit Intent is useful when your app cannot perform the action but other apps probably can and you’d like the user to pick which app to use.

There are some other standard actions that intents can use for launching activities.

Читать еще:  Java io ioexception stream closed

Explicit Intent

An explicit intent is an Intent where you explicitly define the component that needs to be called by the Android System. An explicit intent is one that you can use to launch a specific app component, such as a particular activity or service in your app.

The Different Methods Used in Intent

  • Action_Main
  • Action_Pick
  • Action_Chooser
  • Action_Dial
  • Action_Call
  • Action_Send
  • Action_SendTo
  1. ACTION_MAIN

    Use: Adds an action to an intent Filter.

    2. ACTION_PICK

    It is using for picking the image from CAMERA or GALLERY.

    3. ACTION_CHOOSER

    Use: It is used for choosing the image from the gallery.

    4. ACTION_DIAL

    Use – Display the phone dialer with the given number filled in.

    5. ACTION_CALL

    Use: Placing and immediate phone call

    6. ACTION_SEND

    Use: Sending Text content from one activity to other.

    7. ACTION_SENDTO

    Use : Preparing an SMS. The text is supplied as an Extra element. The intent excepts such as values to be called “sms_body”

    Examples Of Intent

    There is a simple application with two screens:

    1. First Screen contains three controls – TextView , EditText, and Button
    2. Second Screen contains a TextView
    3. Now Go to File -> New -> Android Project with Project Name IntentDemo
    4. Set the target device and select target android device version.
    5. Click on Finish.

    Give the name on Edit Text and click on Submit. You will get the output as shown below:

    Java android intent

    Intents are used generally for starting a new activity using startActivity().

    Use of Intent

    1. For Launching an Activity
    2. To start a New Service
    3. For Broadcasting Messages
    4. To Display a list of contacts in ListView

    Types of Intent in Android

    Intent is of two types:

    1. Implicit Intent
    2. Explicit Intent

    Implicit Intent

    The implicit intent is the intent where instead of defining the exact components, you define the action that you want to perform for different activities.

    An Implicit intent specifies an action that can invoke any app on the device to be able to perform an action. Using an Implicit Intent is useful when your app cannot perform the action but other apps probably can and you’d like the user to pick which app to use.

    There are some other standard actions that intents can use for launching activities.

    Explicit Intent

    An explicit intent is an Intent where you explicitly define the component that needs to be called by the Android System. An explicit intent is one that you can use to launch a specific app component, such as a particular activity or service in your app.

    The Different Methods Used in Intent

    • Action_Main
    • Action_Pick
    • Action_Chooser
    • Action_Dial
    • Action_Call
    • Action_Send
    • Action_SendTo
    1. ACTION_MAIN

      Use: Adds an action to an intent Filter.

      2. ACTION_PICK

      It is using for picking the image from CAMERA or GALLERY.

      3. ACTION_CHOOSER

      Use: It is used for choosing the image from the gallery.

      4. ACTION_DIAL

      Use – Display the phone dialer with the given number filled in.

      5. ACTION_CALL

      Use: Placing and immediate phone call

      6. ACTION_SEND

      Use: Sending Text content from one activity to other.

      7. ACTION_SENDTO

      Use : Preparing an SMS. The text is supplied as an Extra element. The intent excepts such as values to be called “sms_body”

      Examples Of Intent

      There is a simple application with two screens:

      1. First Screen contains three controls – TextView , EditText, and Button
      2. Second Screen contains a TextView
      3. Now Go to File -> New -> Android Project with Project Name IntentDemo
      4. Set the target device and select target android device version.
      5. Click on Finish.

      Give the name on Edit Text and click on Submit. You will get the output as shown below:

Ссылка на основную публикацию
Adblock
detector