Учебники

Android — Содержание и фильтры

Намерение Android — это абстрактное описание выполняемой операции. Его можно использовать с startActivity для запуска Activity, для передачи BroadIntent его любым заинтересованным компонентам BroadcastReceiver и startService (Intent) или bindService (Intent, ServiceConnection, int) для взаимодействия с фоновой службой.

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

Например, предположим, что у вас есть действие, для которого требуется запустить почтовый клиент и отправить электронное письмо с помощью устройства Android. Для этого ваша активность отправит ACTION_SEND вместе с соответствующим выбором в Android Intent Resolver. Указанный выбор дает пользователю удобный интерфейс для выбора способа отправки данных электронной почты.

Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:"));
email.putExtra(Intent.EXTRA_EMAIL, recipients);
email.putExtra(Intent.EXTRA_SUBJECT, subject.getText().toString());
email.putExtra(Intent.EXTRA_TEXT, body.getText().toString());
startActivity(Intent.createChooser(email, "Choose an email client from..."));

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

Отправить письмо

Например, предположим, что у вас есть действие, которому нужно открыть URL-адрес в веб-браузере на вашем устройстве Android. Для этого ваша активность отправит ACTION_WEB_SEARCH Intent в Android Intent Resolver, чтобы открыть данный URL в веб-браузере. Средство Intent Resolver анализирует список действий и выбирает тот, который наилучшим образом соответствует вашему намерению, в данном случае — активности веб-браузера. Затем Intent Resolver передает вашу веб-страницу в веб-браузер и запускает веб-браузерную активность.

String q = "tutorialspoint";
Intent intent = new Intent(Intent.ACTION_WEB_SEARCH );
intent.putExtra(SearchManager.QUERY, q);
startActivity(intent);

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

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

Sr.No Метод и описание
1

Context.startActivity ()

Объект Intent передается этому методу для запуска нового действия или получения существующего действия для выполнения чего-то нового.

2

Context.startService ()

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

3

Context.sendBroadcast ()

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

Context.startActivity ()

Объект Intent передается этому методу для запуска нового действия или получения существующего действия для выполнения чего-то нового.

Context.startService ()

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

Context.sendBroadcast ()

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

Намеренные объекты

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

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

действие

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

Действие в объекте Intent может быть установлено методом setAction () и прочитано getAction ().

Данные

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

Эти атрибуты, которые определяют формат URL-адреса, являются необязательными, но также взаимозависимыми —

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

Метод setData () определяет данные только как URI, setType () указывает их только как тип MIME, а setDataAndType () указывает их как URI и тип MIME. URI читается getData (), а тип — getType ().

Некоторые примеры пар действий / данных —

Sr.No. Действие / пара данных и описание
1

Контент ACTION_VIEW: // контакты / люди / 1

Вывести информацию о человеке, чей идентификатор «1».

2

Содержание ACTION_DIAL: // контакты / люди / 1

Показать номеронабиратель телефона с человеком, заполненным.

3

ACTION_VIEW тел .: 123

Показать номеронабиратель телефона с указанным номером.

4

ACTION_DIAL тел: 123

Показать номеронабиратель телефона с указанным номером.

5

Содержание ACTION_EDIT: // контакты / люди / 1

Изменить информацию о человеке, чей идентификатор «1».

6

Содержание ACTION_VIEW: // контакты / люди /

Показать список людей, которые пользователь может просматривать.

7

ACTION_SET_WALLPAPER

Показать настройки для выбора обоев

8

ACTION_SYNC

Данные будут синхронизированы, постоянное значение равно android.intent.action.SYNC

9

ACTION_SYSTEM_TUTORIAL

Это запустит определенное платформой руководство (руководство по умолчанию или руководство по запуску)

10

ACTION_TIMEZONE_CHANGED

Он указывает, когда часовой пояс изменился

11

ACTION_UNINSTALL_PACKAGE

Используется для запуска деинсталлятора по умолчанию

Контент ACTION_VIEW: // контакты / люди / 1

Вывести информацию о человеке, чей идентификатор «1».

Содержание ACTION_DIAL: // контакты / люди / 1

Показать номеронабиратель телефона с человеком, заполненным.

ACTION_VIEW тел .: 123

Показать номеронабиратель телефона с указанным номером.

ACTION_DIAL тел: 123

Показать номеронабиратель телефона с указанным номером.

Содержание ACTION_EDIT: // контакты / люди / 1

Изменить информацию о человеке, чей идентификатор «1».

Содержание ACTION_VIEW: // контакты / люди /

Показать список людей, которые пользователь может просматривать.

ACTION_SET_WALLPAPER

Показать настройки для выбора обоев

ACTION_SYNC

Данные будут синхронизированы, постоянное значение равно android.intent.action.SYNC

ACTION_SYSTEM_TUTORIAL

Это запустит определенное платформой руководство (руководство по умолчанию или руководство по запуску)

ACTION_TIMEZONE_CHANGED

Он указывает, когда часовой пояс изменился

ACTION_UNINSTALL_PACKAGE

Используется для запуска деинсталлятора по умолчанию

категория

Категория является необязательной частью объекта Intent и представляет собой строку, содержащую дополнительную информацию о типе компонента, который должен обрабатывать намерение. Метод addCategory () помещает категорию в объект Intent, removeCategory () удаляет ранее добавленную категорию, а getCategories () получает набор всех категорий, находящихся в данный момент в объекте. Вот список стандартных категорий Android .

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

Дополнительно

Это будет в парах ключ-значение для дополнительной информации, которая должна быть доставлена ​​компоненту, обрабатывающему намерение. Дополнения могут быть установлены и прочитаны с использованием методов putExtras () и getExtras () соответственно. Вот список стандартных данных Android Intent Standard

Флаги

Эти флаги являются необязательной частью объекта Intent и инструктируют систему Android, как запускать действие, как его обрабатывать после его запуска и т. Д.

Sr.No Флаги и описание
1

FLAG_ACTIVITY_CLEAR_TASK

Если он установлен в намерении, переданном в Context.startActivity (), этот флаг приведет к тому, что любая существующая задача, которая будет связана с действием, будет очищена перед началом действия. Таким образом, действие становится новым корнем в противном случае пустой задачи, и все старые действия завершаются. Это можно использовать только в сочетании с FLAG_ACTIVITY_NEW_TASK.

2

FLAG_ACTIVITY_CLEAR_TOP

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

3

FLAG_ACTIVITY_NEW_TASK

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

FLAG_ACTIVITY_CLEAR_TASK

Если он установлен в намерении, переданном в Context.startActivity (), этот флаг приведет к тому, что любая существующая задача, которая будет связана с действием, будет очищена перед началом действия. Таким образом, действие становится новым корнем в противном случае пустой задачи, и все старые действия завершаются. Это можно использовать только в сочетании с FLAG_ACTIVITY_NEW_TASK.

FLAG_ACTIVITY_CLEAR_TOP

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

FLAG_ACTIVITY_NEW_TASK

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

Имя компонента

Это необязательное поле является объектом- компонентом android, представляющим класс Activity, Service или BroadcastReceiver. Если он установлен, объект Intent доставляется экземпляру назначенного класса, в противном случае Android использует другую информацию в объекте Intent, чтобы найти подходящую цель.

Имя компонента устанавливается с помощью setComponent (), setClass () или setClassName () и читается с помощью getComponent ().

Типы Интентов

В Android поддерживаются следующие два типа намерений

умысел

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

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

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

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

// Explicit Intent by specifying its class name
Intent i = new Intent(FirstActivity.this, SecondActivity.class);

// Starts TargetActivity
startActivity(i);

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

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

Intent read1=new Intent();
read1.setAction(android.content.Intent.ACTION_VIEW);
read1.setData(ContactsContract.Contacts.CONTENT_URI);
startActivity(read1);

Выше код даст результат, как показано ниже

умысел

Целевой компонент, который получает намерение, может использовать метод getExtras (), чтобы получить дополнительные данные, отправленные исходным компонентом. Например —

// Get bundle object at appropriate place in your code
Bundle extras = getIntent().getExtras();

// Extract data using passed keys
String value1 = extras.getString("Key1");
String value2 = extras.getString("Key2");

пример

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

шаг Описание
1 Вы будете использовать IDE Android Studio для создания приложения Android и назовите его « Мое приложение» в пакете com.example.saira_000.myapplication .
2 Измените файл src / main / java / MainActivity.java и добавьте код для определения двух слушателей, соответствующих двум кнопкам, т.е. Запустите браузер и запустите телефон.
3 Измените XML-файл макета res / layout / activity_main.xml, чтобы добавить три кнопки в линейный макет.
4 Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение.

Ниже приведено содержимое измененного основного файла активности src / com.example.My Application / MainActivity.java .

package com.example.saira_000.myapplication;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
   Button b1,b2;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {

         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW, 
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2=(Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("tel:9510300000"));
            startActivity(i);
         }
      });
   }
}

Ниже будет содержание файла res / layout / activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity">
   
   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />
      
   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignRight="@+id/textView1"
      android:layout_alignEnd="@+id/textView1"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Phone"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignRight="@+id/textView2"
      android:layout_alignEnd="@+id/textView2" />
</RelativeLayout>

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Applicaiton</string>
</resources>

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.saira_000.myapplication">

   <application
      android:allowBackup="true"
      android:icon="@mipmap/ic_launcher"
      android:label="@string/app_name"
      android:supportsRtl="true"
      android:theme="@style/AppTheme">
      <activity android:name=".MainActivity">
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
   </application>
</manifest>

Давайте попробуем запустить ваше приложение My Application . Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок на панели инструментов. Android Studio устанавливает приложение на AVD и запускает его, и, если все в порядке с вашими настройками и приложением, оно отобразится в следующем окне эмулятора —

Android Intent Screen

Теперь нажмите кнопку « Запустить браузер» , чтобы запустить настроенный браузер и отобразить http://www.example.com, как показано ниже —

Android Intent Browser

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

Намеренные фильтры

Вы видели, как Intent был использован для вызова другого действия. ОС Android использует фильтры для точного определения набора приемников «Деятельности», «Службы» и «Вещание», которые могут обрабатывать намерение с помощью указанного набора действий, категорий, схемы данных, связанной с намерением. Вы будете использовать элемент <intent-filter> в файле манифеста для перечисления действий, категорий и типов данных, связанных с любым действием, услугой или широковещательным получателем.

Ниже приведен пример части файла AndroidManifest.xml для указания действия com.example.My Application.CustomActivity, которое может быть вызвано любым из двух упомянутых действий, одной категорией и одной информацией.

<activity android:name=".CustomActivity"
   android:label="@string/app_name">
   
   <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <action android:name="com.example.My Application.LAUNCH" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="http" />
   </intent-filter>
   
</activity>

Как только это действие определено вместе с вышеупомянутыми фильтрами, другие действия смогут вызывать это действие, используя либо android.intent.action.VIEW , либо действие com.example.My Application.LAUNCH, если их категория — android.intent. .category.DEFAULT .

Элемент <data> указывает тип данных, ожидаемый вызываемым действием, и для приведенного выше примера наше пользовательское действие ожидает, что данные начнутся с «http: //»

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

Есть следующие тестовые проверки Android перед вызовом действия:

  • Фильтр <intent-filter> может перечислить более одного действия, как показано выше, но этот список не может быть пустым; фильтр должен содержать хотя бы один элемент <action>, иначе он заблокирует все намерения. Если упомянуто более одного действия, то Android пытается сопоставить одно из упомянутых действий, прежде чем вызывать действие.

  • Фильтр <intent-filter> может перечислять ноль, одну или несколько категорий. если упомянутая категория не указана, Android всегда проходит этот тест, но если упоминается более одной категории, то для намерения пройти тест категории, каждая категория в объекте Intent должна соответствовать категории в фильтре.

  • Каждый элемент <data> может указывать URI и тип данных (тип мультимедиа MIME). Существуют отдельные атрибуты, такие как схема, хост, порт и путь для каждой части URI. Объект Intent, который содержит как URI, так и тип данных, проходит часть типа данных теста, только если его тип соответствует типу, указанному в фильтре.

Фильтр <intent-filter> может перечислить более одного действия, как показано выше, но этот список не может быть пустым; фильтр должен содержать хотя бы один элемент <action>, иначе он заблокирует все намерения. Если упомянуто более одного действия, то Android пытается сопоставить одно из упомянутых действий, прежде чем вызывать действие.

Фильтр <intent-filter> может перечислять ноль, одну или несколько категорий. если упомянутая категория не указана, Android всегда проходит этот тест, но если упоминается более одной категории, то для намерения пройти тест категории, каждая категория в объекте Intent должна соответствовать категории в фильтре.

Каждый элемент <data> может указывать URI и тип данных (тип мультимедиа MIME). Существуют отдельные атрибуты, такие как схема, хост, порт и путь для каждой части URI. Объект Intent, который содержит как URI, так и тип данных, проходит часть типа данных теста, только если его тип соответствует типу, указанному в фильтре.

пример

Следующий пример является модификацией вышеприведенного примера. Здесь мы увидим, как Android разрешает конфликт, если одно намерение вызывает две действия, определенные в, далее, как вызвать пользовательское действие с использованием фильтра, а третье — исключение, если Android не подает соответствующее действие, определенное для намерения.

шаг Описание
1 Вы будете использовать Android Studio для создания приложения Android и назовите его My Application в пакете com.example.tutorialspoint7.myapplication; ,
2 Измените файл src / Main / Java / MainActivity.java и добавьте код для определения трех слушателей, соответствующих трем кнопкам, определенным в файле макета.
3 Добавьте новый файл src / Main / Java / CustomActivity.java, чтобы иметь одно настраиваемое действие, которое будет вызываться разными намерениями.
4 Измените XML-файл макета res / layout / activity_main.xml, чтобы добавить три кнопки в линейный макет.
5 Добавьте один XML-файл макета res / layout / custom_view.xml, чтобы добавить простой <TextView>, чтобы показать переданные данные через намерение.
6 Измените AndroidManifest.xml, добавив <intent-filter>, чтобы определить правила для намерения вызывать пользовательские действия.
7 Запустите приложение, чтобы запустить эмулятор Android, и проверьте результат изменений, внесенных в приложение.

Ниже приводится содержимое измененного основного файла активности src / MainActivity.java .

package com.example.tutorialspoint7.myapplication;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {
   Button b1,b2,b3;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      b1=(Button)findViewById(R.id.button);
      b1.setOnClickListener(new View.OnClickListener() {
      
         @Override
         public void onClick(View v) {
            Intent i = new Intent(android.content.Intent.ACTION_VIEW,
               Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b2 = (Button)findViewById(R.id.button2);
      b2.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               tutorialspoint7.myapplication.
                  LAUNCH",Uri.parse("http://www.example.com"));
            startActivity(i);
         }
      });

      b3 = (Button)findViewById(R.id.button3);
      b3.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            Intent i = new Intent("com.example.
               My Application.LAUNCH",
                  Uri.parse("https://www.example.com"));
            startActivity(i);
         }
      });
   }
}

Ниже приводится содержимое измененного основного файла активности src / com.example.My Application / CustomActivity.java .

package com.example.tutorialspoint7.myapplication;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

/**
 * Created by TutorialsPoint7 on 8/23/2016.
 */
public class CustomActivity extends Activity {
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.custom_view);
      TextView label = (TextView) findViewById(R.id.show_data);
      Uri url = getIntent().getData();
      label.setText(url.toString());
   }
}

Ниже будет содержание файла res / layout / activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="com.example.tutorialspoint7.myapplication.MainActivity">

   <TextView
      android:id="@+id/textView1"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Intent Example"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />

   <TextView
      android:id="@+id/textView2"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/textView1"
      android:layout_centerHorizontal="true" />

   <ImageButton
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageButton"
      android:src="@drawable/abc"
      android:layout_below="@+id/textView2"
      android:layout_centerHorizontal="true" />

   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/imageButton"
      android:layout_alignRight="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start Browser"
      android:id="@+id/button"
      android:layout_alignTop="@+id/editText"
      android:layout_alignLeft="@+id/imageButton"
      android:layout_alignStart="@+id/imageButton"
      android:layout_alignEnd="@+id/imageButton" />

   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Start browsing with launch action"
      android:id="@+id/button2"
      android:layout_below="@+id/button"
      android:layout_alignLeft="@+id/button"
      android:layout_alignStart="@+id/button"
      android:layout_alignEnd="@+id/button" />
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Exceptional condition"
      android:id="@+id/button3"
      android:layout_below="@+id/button2"
      android:layout_alignLeft="@+id/button2"
      android:layout_alignStart="@+id/button2"
      android:layout_toStartOf="@+id/editText"
      android:layout_alignParentEnd="true" />
</RelativeLayout>

Ниже будет содержимое файла res / layout / custom_view.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">
   <TextView android:id="@+id/show_data"
      android:layout_width="fill_parent"
      android:layout_height="400dp"/>
</LinearLayout>

Ниже будет содержимое файла res / values ​​/ strings.xml для определения двух новых констант:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">My Application</string>
</resources>

Ниже приводится содержимое по умолчанию для AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.tutorialspoint7.myapplication">

   <application
      android:allowBackup = "true"
      android:icon = "@mipmap/ic_launcher"
      android:label = "@string/app_name"
      android:supportsRtl = "true"
      android:theme = "@style/AppTheme">
      <activity android:name = ".MainActivity">
         <intent-filter>
            <action android:name = "android.intent.action.MAIN" />
            <category android:name = "android.intent.category.LAUNCHER" />
         </intent-filter>
      </activity>
      
      <activity android:name="com.example.tutorialspoint7.myapplication.CustomActivity">

         <intent-filter>
            <action android:name = "android.intent.action.VIEW" />
            <action android:name = "com.example.tutorialspoint7.myapplication.LAUNCH" />
            <category android:name = "android.intent.category.DEFAULT" />
            <data android:scheme = "http" />
         </intent-filter>

      </activity>
   </application>

</manifest>

Давайте попробуем запустить ваше приложение My Application . Я предполагаю, что вы создали свой AVD во время настройки среды. Чтобы запустить приложение из Android Studio, откройте один из файлов деятельности вашего проекта и нажмите «Выполнить». Eclipse Run Icon значок с панели инструментов. Android Studio устанавливает приложение на AVD и запускает его, и если все в порядке с вашими настройками и приложением, оно отобразится в следующем окне эмулятора —

Android Custom Activity

Теперь давайте начнем с первой кнопки «Запустить браузер с действием VIEW». Здесь мы определили нашу пользовательскую активность с помощью фильтра «android.intent.action.VIEW», и уже есть одно действие по умолчанию для действия VIEW, определенного Android, который запускает веб-браузер, поэтому Android отображает следующие две опции для выбора действия, которое вы хочу запустить.

Android Два Действия

Теперь, если вы выберете Браузер, то Android запустит веб-браузер и откроет веб-сайт example.com, но если вы выберете опцию IndentDemo, тогда Android запустит CustomActivity, которая ничего не делает, а просто захватывает переданные данные и отображает в текстовом виде следующим образом —

Запускается пользовательская активность Android

Теперь вернитесь назад, используя кнопку «Назад», и нажмите кнопку «Запустить браузер с действием ЗАПУСК», здесь Android применяет фильтр для выбора определения активности и просто запускает пользовательскую активность.

Опять же, вернитесь назад, используя кнопку «Назад», и нажмите кнопку «Условие исключения», здесь Android пытается найти действительный фильтр для данного намерения, но не находит допустимого определенного действия, потому что на этот раз мы использовали данные как https вместо http хотя мы даем правильное действие, поэтому Android вызывает исключение и показывает следующий экран —