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 -