Android - intents e filtros

Um Android Intenté uma descrição abstrata de uma operação a ser executada. Pode ser usado comstartActivity para lançar uma atividade, broadcastIntent para enviá-lo a qualquer componente interessado do BroadcastReceiver, e startService(Intent) ou bindService(Intent, ServiceConnection, int) para se comunicar com um serviço em segundo plano.

The intent itself, an Intent object, is a passive data structure holding an abstract description of an operation to be performed.

Por exemplo, vamos supor que você tenha uma Activity que precisa iniciar um cliente de email e enviar um email usando seu dispositivo Android. Para este propósito, sua atividade enviaria um ACTION_SEND junto com os apropriadoschooser, para o Android Intent Resolver. O seletor especificado fornece a interface adequada para o usuário escolher como enviar seus dados de e-mail.

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..."));

A sintaxe acima chama o método startActivity para iniciar uma atividade de e-mail e o resultado deve ser como mostrado abaixo -

Por exemplo, suponha que você tenha uma atividade que precisa abrir URL em um navegador da web em seu dispositivo Android. Para este propósito, sua atividade enviará ACTION_WEB_SEARCH Intent ao Android Intent Resolver para abrir o URL fornecido no navegador da web. O Intent Resolver analisa uma lista de atividades e escolhe aquela que melhor corresponde ao seu intent, neste caso, a atividade do navegador da web. O Intent Resolver então passa sua página da web para o navegador da web e inicia a atividade do navegador da web.

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

O exemplo acima irá pesquisar como tutorialspoint no motor de busca Android e dá o resultado do ponto de tutorial na sua atividade

Existem mecanismos separados para entregar intenções para cada tipo de componente - atividades, serviços e receptores de transmissão.

Sr. Não Método e Descrição
1

Context.startActivity()

O objeto Intent é passado para este método para lançar uma nova atividade ou fazer com que uma atividade existente faça algo novo.

2

Context.startService()

O objeto Intent é passado para este método para iniciar um serviço ou entregar novas instruções para um serviço contínuo.

3

Context.sendBroadcast()

O objeto Intent é passado para este método para entregar a mensagem a todos os broadcast receivers interessados.

Objetos de Intenção

Um objeto Intent é um pacote de informações usado pelo componente que recebe a intenção, bem como informações usadas pelo sistema Android.

Um objeto Intent pode conter os seguintes componentes com base no que ele está se comunicando ou vai realizar -

Açao

Esta é uma parte obrigatória do objeto Intent e é uma string que nomeia a ação a ser executada - ou, no caso de intents de transmissão, a ação que ocorreu e está sendo relatada. A ação determina amplamente como o restante do objeto de intenção é estruturado. A classe Intent define várias constantes de ação correspondentes a diferentes intents. Aqui está uma lista de ações padrão de intent do Android

A ação em um objeto Intent pode ser definida pelo método setAction () e lida por getAction ().

Dados

Adiciona uma especificação de dados a um filtro de intenção. A especificação pode ser apenas um tipo de dados (o atributo mimeType), apenas um URI ou um tipo de dados e um URI. Um URI é especificado por atributos separados para cada uma de suas partes -

Esses atributos que especificam o formato do URL são opcionais, mas também dependem mutuamente -

  • Se um esquema não for especificado para o filtro de intenção, todos os outros atributos de URI serão ignorados.
  • Se um host não for especificado para o filtro, o atributo de porta e todos os atributos de caminho serão ignorados.

O método setData () especifica os dados apenas como URI, setType () os especifica apenas como tipo MIME e setDataAndType () os especifica tanto como URI quanto como tipo MIME. O URI é lido por getData () e o tipo por getType ().

Alguns exemplos de pares de ação / dados são -

Sr. Não. Ação / Par de dados e descrição
1

ACTION_VIEW content://contacts/people/1

Exibir informações sobre a pessoa cujo identificador é "1".

2

ACTION_DIAL content://contacts/people/1

Exibir o discador do telefone com a pessoa preenchida.

3

ACTION_VIEW tel:123

Exibir o discador do telefone com o número fornecido preenchido.

4

ACTION_DIAL tel:123

Exibir o discador do telefone com o número fornecido preenchido.

5

ACTION_EDIT content://contacts/people/1

Edite as informações sobre a pessoa cujo identificador é "1".

6

ACTION_VIEW content://contacts/people/

Exibe uma lista de pessoas, pela qual o usuário pode navegar.

7

ACTION_SET_WALLPAPER

Mostrar configurações para escolher o papel de parede

8

ACTION_SYNC

Os dados serão síncronos, o valor constante é android.intent.action.SYNC

9

ACTION_SYSTEM_TUTORIAL

Isso iniciará o tutorial definido pela plataforma (tutorial padrão ou tutorial de inicialização)

10

ACTION_TIMEZONE_CHANGED

Indica quando o fuso horário mudou

11

ACTION_UNINSTALL_PACKAGE

É usado para executar o desinstalador padrão

Categoria

A categoria é uma parte opcional do objeto Intent e é uma string contendo informações adicionais sobre o tipo de componente que deve manipular a intent. O método addCategory () coloca uma categoria em um objeto Intent, removeCategory () exclui uma categoria adicionada anteriormente e getCategories () obtém o conjunto de todas as categorias atualmente no objeto. Aqui está uma lista das categorias padrão de intenção do Android .

Você pode verificar os detalhes dos Filtros de intent na seção abaixo para entender como usamos as categorias para escolher a atividade apropriada correspondente a um intent.

Extras

Isso estará em pares de valores-chave para informações adicionais que devem ser entregues ao componente que manipula o intent. Os extras podem ser definidos e lidos usando os métodos putExtras () e getExtras (), respectivamente. Aqui está uma lista de dados extras do Android Intent Standard

Bandeiras

Esses sinalizadores são parte opcional do objeto Intent e instruem o sistema Android como iniciar uma atividade e como tratá-la depois de ser iniciada, etc.

Sr. Não Sinalizadores e descrição
1

FLAG_ACTIVITY_CLEAR_TASK

Se definido em um Intent passado para Context.startActivity (), este sinalizador fará com que qualquer tarefa existente que seria associada à atividade seja apagada antes que a atividade seja iniciada. Ou seja, a atividade se torna a nova raiz de uma tarefa vazia e todas as atividades antigas são concluídas. Isso só pode ser usado em conjunto com FLAG_ACTIVITY_NEW_TASK.

2

FLAG_ACTIVITY_CLEAR_TOP

Se definido, e a atividade sendo lançada já está em execução na tarefa atual, então, em vez de lançar uma nova instância dessa atividade, todas as outras atividades em cima dela serão fechadas e este Intent será entregue ao (agora em topo) atividade antiga como um novo Intent.

3

FLAG_ACTIVITY_NEW_TASK

Este sinalizador é geralmente usado por atividades que desejam apresentar um comportamento de estilo "inicializador": eles fornecem ao usuário uma lista de coisas separadas que podem ser feitas, que de outra forma são executadas de forma completamente independente da atividade que as inicia.

Nome do componente

Este campo opcional é um android ComponentNameobjeto que representa a classe Activity, Service ou BroadcastReceiver. Se estiver definido, o objeto Intent é entregue a uma instância da classe designada, caso contrário, o Android usa outras informações no objeto Intent para localizar um destino adequado.

O nome do componente é definido por setComponent (), setClass () ou setClassName () e lido por getComponent ().

Tipos de intenções

Existem dois tipos de intents suportados pelo Android

Intents explícitos

A intenção explícita será conectada ao mundo interno do aplicativo, suponha que se você deseja conectar uma atividade a outra atividade, podemos fazer esta citação por intenção explícita, a imagem abaixo está conectando a primeira atividade à segunda atividade clicando no botão.

Essas intenções designam o componente de destino por seu nome e são normalmente usadas para mensagens internas do aplicativo - como uma atividade iniciando um serviço subordinado ou lançando uma atividade irmã. Por exemplo -

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

// Starts TargetActivity
startActivity(i);

Intenções implícitas

Esses intents não nomeiam um destino e o campo para o nome do componente é deixado em branco. As intenções implícitas costumam ser usadas para ativar componentes em outros aplicativos. Por exemplo -

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

O código acima dará o resultado conforme mostrado abaixo

O componente de destino que recebe a intenção pode usar o getExtras()método para obter os dados extras enviados pelo componente de origem. Por exemplo -

// 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");

Exemplo

O exemplo a seguir mostra a funcionalidade de um Android Intent para iniciar vários aplicativos Android integrados.

Degrau Descrição
1 Você usará o Android Studio IDE para criar um aplicativo Android e nomeá-lo como Meu aplicativo no pacote com.example.saira_000.myapplication .
2 Modifique o arquivo src / main / java / MainActivity.java e adicione o código para definir dois ouvintes correspondentes a dois botões, isto é. Inicie o navegador e o telefone.
3 Modifique o arquivo XML do layout res / layout / activity_main.xml para adicionar três botões no layout linear.
4 Execute o aplicativo para iniciar o emulador Android e verifique o resultado das alterações feitas no aplicativo.

A seguir está o conteúdo do arquivo de atividade principal modificado 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);
         }
      });
   }
}

A seguir estará o conteúdo de res/layout/activity_main.xml arquivo -

<?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>

A seguir estará o conteúdo de res/values/strings.xml para definir duas novas constantes -

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

A seguir está o conteúdo padrão de 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>

Vamos tentar executar o seu My Applicationinscrição. Suponho que você tenha criado o seuAVDao fazer a configuração do ambiente. Para executar o aplicativo do Android Studio, abra um dos arquivos de atividade do seu projeto e clique no

ícone Executar na barra de ferramentas. O Android Studio instala o aplicativo em seu AVD e o inicia e se tudo estiver bem com sua configuração e aplicativo, ele será exibido emulador janela -

Agora clique em Start Browser botão, que iniciará um navegador configurado e exibirá http://www.example.com conforme mostrado abaixo -

De forma semelhante, você pode iniciar a interface do telefone usando o botão Iniciar telefone, que permitirá que você disque o número de telefone já fornecido.

Filtros de Intenção

Você viu como um Intent foi usado para chamar outra atividade. O sistema operacional Android usa filtros para apontar o conjunto de atividades, serviços e receptores de transmissão que podem lidar com o intent com a ajuda de um conjunto específico de ações, categorias e esquema de dados associado a um intent. Você vai usar<intent-filter> elemento no arquivo de manifesto para listar ações, categorias e tipos de dados associados a qualquer atividade, serviço ou receptor de transmissão.

A seguir está um exemplo de uma parte de AndroidManifest.xml arquivo para especificar uma atividade com.example.My Application.CustomActivity que pode ser invocado por qualquer uma das duas ações mencionadas, uma categoria e um dado -

<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>

Uma vez que esta atividade é definida junto com os filtros mencionados acima, outras atividades serão capazes de invocar esta atividade usando o android.intent.action.VIEW, ou usando o com.example.My Application.LAUNCH ação, desde que sua categoria seja android.intent.category.DEFAULT.

o <data> elemento especifica o tipo de dados esperado pela atividade a ser chamada e, para o exemplo acima, nossa atividade personalizada espera que os dados comecem com "http: //"

Pode haver uma situação em que uma intenção pode passar pelos filtros de mais de uma atividade ou serviço, o usuário pode ser questionado sobre qual componente ativar. Uma exceção é levantada se nenhum destino for encontrado.

Existem seguintes verificações de teste do Android antes de invocar uma atividade -

  • Um filtro <intent-filter> pode listar mais de uma ação conforme mostrado acima, mas esta lista não pode estar vazia; um filtro deve conter pelo menos um elemento <action>, caso contrário, bloqueará todos os intents. Se mais de uma ação for mencionada, o Android tenta corresponder a uma das ações mencionadas antes de invocar a atividade.

  • Um filtro <intent-filter> pode listar zero, uma ou mais categorias. se não houver nenhuma categoria mencionada, o Android sempre será aprovado neste teste, mas se mais de uma categoria for mencionada, para uma intenção de passar no teste de categoria, cada categoria no objeto Intent deve corresponder a uma categoria no filtro.

  • Cada elemento <data> pode especificar um URI e um tipo de dados (tipo de mídia MIME). Existem atributos separados comoscheme, host, port, e pathpara cada parte do URI. Um objeto Intent que contém um URI e um tipo de dados passa na parte do tipo de dados do teste apenas se seu tipo corresponder a um tipo listado no filtro.

Exemplo

O exemplo a seguir é uma modificação do exemplo acima. Aqui, veremos como o Android resolve o conflito se um intent está invocando duas atividades definidas em, a seguir, como invocar uma atividade customizada usando um filtro e o terceiro é um caso de exceção se o Android não arquivar a atividade apropriada definida para um intent.

Degrau Descrição
1 Você usará o android studio para criar um aplicativo Android e nomeá-lo como My Application em um pacote com.example.tutorialspoint7.myapplication; .
2 Modifique o arquivo src / Main / Java / MainActivity.java e adicione o código para definir três ouvintes correspondentes a três botões definidos no arquivo de layout.
3 Adicione um novo arquivo src / Main / Java / CustomActivity.java para ter uma atividade customizada que será chamada por diferentes intents.
4 Modifique o arquivo XML do layout res / layout / activity_main.xml para adicionar três botões no layout linear.
5 Adicione um arquivo XML de layout res / layout / custom_view.xml para adicionar um <TextView> simples para mostrar os dados passados ​​por meio do intent.
6 Modifique AndroidManifest.xml para adicionar <intent-filter> para definir regras para sua intenção de invocar atividades personalizadas.
7 Execute o aplicativo para iniciar o emulador Android e verifique o resultado das alterações feitas no aplicativo.

A seguir está o conteúdo do arquivo de atividade principal modificado 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);
         }
      });
   }
}

A seguir está o conteúdo do arquivo de atividade principal modificado 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());
   }
}

A seguir estará o conteúdo de res/layout/activity_main.xml arquivo -

<?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>

A seguir estará o conteúdo de res/layout/custom_view.xml arquivo -

<?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>

A seguir estará o conteúdo de res/values/strings.xml para definir duas novas constantes -

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

A seguir está o conteúdo padrão de 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>

Vamos tentar executar o seu My Applicationinscrição. Suponho que você tenha criado o seuAVDao fazer a configuração do ambiente. Para executar o aplicativo no Android Studio, abra um dos arquivos de atividade do seu projeto e clique no

ícone Executar na barra de ferramentas. O Android Studio instala o aplicativo em seu AVD e o inicia e se tudo estiver bem com sua configuração e aplicativo, ele será exibido a seguir a janela do emulador -

Agora vamos começar com o primeiro botão "Iniciar navegador com VIEW Action". Aqui definimos nossa atividade personalizada com um filtro "android.intent.action.VIEW", e já existe uma atividade padrão contra a ação VIEW definida pelo Android que está iniciando o navegador da web. Portanto, o Android exibe duas opções a seguir para selecionar a atividade que você deseja lançar.

Agora, se você selecionar Navegador, o Android iniciará o navegador da web e abrirá o site example.com, mas se você selecionar a opção IndentDemo, o Android iniciará CustomActivity, que não faz nada além de capturar os dados passados ​​e exibir em uma visualização de texto como segue -

Agora volte usando o botão Voltar e clique no botão "Iniciar navegador com ação LAUNCH", aqui o Android aplica o filtro para escolher definir atividade e simplesmente iniciar sua atividade personalizada

Novamente, volte usando o botão Voltar e clique no botão "Condição de Exceção", aqui o Android tenta encontrar um filtro válido para o intent dado, mas não encontra uma atividade válida definida porque desta vez usamos dados como https ao invés de http embora estejamos dando uma ação correta, então o Android levanta uma exceção e mostra a tela a seguir -