Você está na página 1de 12

21/01/2019 Tudo sobre a classe Intent.

| Android On Board

Android On Board

Tudo sobre a classe Intent.

A classe Intent é um dos pilares da arquitetura do Android.

Link oficial da classe Intent: h p://developer.android.com/reference/android/content/Intent.html


(h p://developer.android.com/reference/android/content/Intent.html)

Essa classe permite realizar requisições que podem ser atendidas tanto pela sua própria aplicação
ou por aplicações de terceiros que estejam preparadas para atender essa requisição.

Essas requisições variam de uma simples troca de Activity, para uma solicitação de leitura de
código de barras de um aplicativo de terceiro.

Começando pelo simples

É raro hoje em dia encontrar um aplicativo que tenha apenas uma tela, ou seja apenas uma
Activity.
Aplicativos móveis rodam em telas geralmente pequenas de modo que na maioria das vezes não
conseguimos exibir todas as funcionalidades do app em uma única Activity.

Tendo esse cenário em mãos temos que saber como trocar de Activitys.

Vamos a um exemplo

Imagine um aplicativo que tenha uma tela de Login onde o usuário tem que informar e-mail e
senha, após isso ele tem que pressionar o botão Entrar, para ser redirecionado para a tela de
Perfil.

Analisando o cenário acima, já identificamos a necessidade da criação de duas Activitys, a


Activity de Login e a Activity de Perfil.

Então por favor crie essas duas estruturas e lembre de informar ambas no AndroidManifest.xml.

Sabemos que a Activity de Login contará com um layout com dois EditText (E-mail e senha) e
um Bu on (Entrar).

Vejamos o código desse layout:

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 1/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
2 xmlns:tools="http://schemas.android.com/tools (http://schemas.androi
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <EditText
8 android:id="@+id/edit_text_email"
9 android:layout_width="match_parent"
10 android:layout_height="wrap_content"
11 android:hint="E-mail" />
12
13 <EditText
14 android:id="@+id/edit_text_senha"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:hint="Senha" />
18
19 <Button
20 android:layout_width="match_parent"
21 android:layout_height="wrap_content"
22 android:onClick="onClickEntrar"
23 android:text="Entrar" />
24
25 </LinearLayout>

Repare que o botão possui a tag onClickEntrar, isso significa que ao ser pressionado o método
onClickEntrar da Activity na qual este layout foi vinculado será acionado.

Vamos ver então a nossa Activity de Login:

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 2/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

1 public class LoginActivity extends Activity {


2
3 public static final String KEY_INFO_LOGIN = "KEY_INFO_LOGIN";
4
5 private EditText editTextEmail;
6 private EditText editTextSenha;
7
8 @Override
9 protected void onCreate(Bundle savedInstanceState) {
10 super.onCreate(savedInstanceState);
11 setContentView(R.layout.login); // Vinculando o layout a uma Act
12
13 // Vinculando os EditText definidos no login.xml no nosso código
14 editTextEmail = (EditText) findViewById(R.id.edit_text_email);
15 editTextSenha = (EditText) findViewById(R.id.edit_text_senha);
16 }
17
18 public void onClickEntrar(View view) { // Método será acionado quand
19
20 Bundle bundleInformacoes = new Bundle(); // Criamos um Bundle -
21
22 String email = editTextEmail.getText().toString(); // Recuperamo
23
24 bundleInformacoes.putString(KEY_INFO_LOGIN, email); // Colocamos
25
26 Intent intentMudancaTela = new Intent(this, PerfilActivity.class
27
28 intentMudancaTela.putExtras(bundleInformacoes); // Colocamos o B
29
30 startActivity(intentMudancaTela); // Disparamos a Intent. Após i
31 }
32
33 }

Analisando o código acima podemos ver que vinculamos o layout XML criado logo acima a nossa
Activity logo no método onCreate(Bundle savedInstance).

O ponto que merece a nossa atenção mesmo é o método onClickEntrar.

Logo na primeira linha criamos um objeto da classe Bundle.


Podemos definir essa estrutura como uma caixa onde colocamos informações importantes que
desejamos enviar para a próxima Activity que irá ser chamada.

Neste bundle recém criado adicionamos o e-mail que o usuário digitou. Fazemos isso através do
método putString esse método recebe dois parâmetros um deles é a String email, e o segundo é
uma chave que informamos via a constante KEY_INFO_LOGIN.

Pra que essa chave?

Essa chave é utilizada no momento em que queremos recuperar o e-mail do Bundle. No caso na
Activity PerfilActivity.class. Veremos como recuperar informações do Bundle mais a frente.

Atente também que o Bundle possui vários outros métodos além do putString, isso significa que
ele esta apto a carregar uma grande variedade de tipos de dados.

Com o Bundle criado é a vez de criarmos a nossa Intent. Perceba que informamos no construtor
da Intent a Activity de origem representada pelo this e a classe da Activity que queremos
chamar no caso a PerfilActivity.class.

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 3/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Após a criação da Intent vinculamos o Bundle a ela, através do método putExtras da própria
Intent.

Agora é só disparar essa Intent. Fazemos isso através do método startActivity, presente na
própria Activity.
Este método recebe a Intent como parâmetro e após ser executado a Activity de nome
PerfilActivity.class tomara a frente da pilha de Activitys e ficará em contato com o usuário.

Um outro método muito importante que não foi exemplificado ainda mais será visto mais adiante
neste artigo é o startActivityForResult(Intent intent, int requestCode); este método faz
exatamente a mesma coisa que o método startActivity, no entanto ele aguarda uma resposta para
a requisição da Intent.

Exemplo:

Uma Activity A chamará a Activity B usando startActivityForResult. Quando a Activity B for


finalizada, ela terá a chance de enviar algum Bundle de resposta para Activity A.
Veremos exemplos deste caso mais a frente neste artigo.

Bom Agora nos resta analisar a Activity PefilActivity.

Esta Activity estará vinculada a um layout XML muito simples que contará apenas com um
TextView que irá exibir o e-mail enviado pela Activity de Login.

Vejamos o código desse layout:

1 <?xml version="1.0" encoding="utf-8"?>


2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android
3 android:layout_width="match_parent"
4 android:layout_height="match_parent"
5 android:orientation="vertical" >
6
7 <TextView
8 android:textSize="20sp"
9 android:layout_gravity="center"
10 android:id="@+id/text_view_perfil"
11 android:layout_width="wrap_content"
12 android:layout_height="wrap_content" />
13
14 </LinearLayout>

Agora vamos ver como ficou a nossa Activity de Perfil.

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 4/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

1 public class PerfilActivity extends Activity {


2
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.perfil);
7
8 Intent intentPassada = getIntent(); // Recupera a Intent que foi
9 Bundle bundle = intentPassada.getExtras(); // Recupera o Bundle
10 String email = bundle.getString(LoginActivity.KEY_INFO_LOGIN); /
11
12 TextView textViewPerfil = (TextView) findViewById(R.id.text_view
13 textViewPerfil.setText(email); // Exibe o e-mail na interface gr
14 }
15
16 }

Tudo acontece no método onCreate(Bundle savendInstance).


É la que pegamos a referência da Intent que chamou esta Activity, com a Intent em mãos
pegamos o Bundle que estava vinculada a ela, e com o Bundle pegamos o e-mail que foi passado
pela Activity anterior.

Agora você pode perceber a utilidade da constante KEY_INFO_LOGIN, ela é a chave para
recuperarmos a String e-mail informada na Activity de Login.

Com a String e-mail em mãos informamos ela no nosso TextView e fim de papo.

Agora vamos estudar funcionalidades um pouco mais complexas que podemos alcançar com o
auxílio da Intent.

Um jeito muito simples de compartilhar funcionalidades entre aplicativos.

Entenda a Intent como um pedido que o seu aplicativo faz para o Sistema Operacional Android.
Ao receber o pedido do seu app, o Android vai vasculhar em todos os aplicativos instalados no
dispositivo e irá verificar se algum deles esta preparado para atender o que o seu
aplicativo pediu.

Caso encontre algum, o mesmo será acionado.


E poderá retornar um resultado para o aplicativo que o chamou. Esse resultado pode ser
qualquer coisa, uma foto, um texto, um arquivo, etc.

Mas como o Android sabe qual aplicativo consegue atender determinada Intent?

Para estar apto a atender a solicitações via Intent, o aplicativo (que deseja atender a determinada
solicitação) deve informar uma IntentFilter no seu projeto.

Como o próprio nome indica, Intent é uma intenção e a IntentFilter é um filtro de intenção.

Então se você criar um aplicativo que tira fotos, e deseja compartilhar essa funcionalidade dele
com outros sistemas do Android, basta declarar uma IntentFilter la no AndroidManifest.xml
igual ao código abaixo:

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 5/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

1 <activity android:name=".CameraActivity" >


2 <intent-filter>
3 <action android:name="android.media.action.IMAGE_CAPTURE" />
4 <category android:name="android.intent.category.DEFAULT" />
5 </intent-filter>
6 </activity>

Se algum aplicativo executar a Intent de foto, o seu aplicativo será acionado. Em casos onde o
dispositivo tenha mais de um aplicativo capaz de gerenciar captura de imagens, aparecerá um
menu onde o usuário escolherá o app de sua preferência.

OBS: No decorrer do artigo teremos exemplos de como criar Intent’s. Dentre esses exemplos
demonstraremos como criar uma Intent que solicita a captura de foto.

Vejamos alguns exemplos de compartilhamento de funcionalidades via aplicativos diferentes:

A intent abaixo irá requisitar a funcionalidade de envio de e-mail.

O código abaixo mostra como criar e disparar uma Intent para o sistema operacional com o
intuito de buscar algum aplicativo que envie e-mail.

1 Intent intent = new Intent(Intent.ACTION_SENDTO);


2 intent.setType("text/plain");
3 intent.putExtra(Intent.EXTRA_SUBJECT, "Subject of email");
4 intent.putExtra(Intent.EXTRA_TEXT, "Body of email");
5 intent.setData(Uri.parse("mailto:default@recipient.com"));
6 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
7 startActivity(intent);

Se no dispositivo onde este app de exemplo for executado estiver instalado algum aplicativo que
registrou via IntentFilter ser capaz de enviar e-mail.

O sistema capaz de enviar e-mail será iniciado e conseguiremos enviar e-mail na nossa própria
aplicação sem ter a necessidade de desenvolver essa funcionalidade. Apenas utilizando um
sistema de terceiro, muito provavelmente o aplicativo do GMAIL.

Outro exemplo, nesse caso a Intent que estamos iniciando executará um video do youtube.

Novamente conseguiremos usufruir da funcionalidade de exibição de video sem ter


implementando código algum, apenas utilizando uma outra aplicação instalada no dispositivo.
Desta vez aparecerá a aplicação que estará preparada para receber a Intent de código
Intent.ACTION_VIEW.

Essa Intent é utilizada para abrir websites. Nesse exemplo abriremos um video do Youtube.

1 Uri uriVideo = Uri.parse("http://www.youtube.com/watch?v=skCNLsrrtUw&feat


2 Intent intent = new Intent(Intent.ACTION_VIEW, uriVideo);
3 startActivity(intent);

Outro exemplo, Agora iniciaremos um telefonema.

Através da Intent abaixo, o aplicativo de chamadas telefônicas nativo do Android será acionado.
Ou eventualmente, um aplicativo de terceiro que implemente tal funcionalidade.

1 Intent intent = new Intent(Intent.ACTION_CALL);


2 intent.setData(Uri.parse("tel:" +numeroDoTelefone));
3 startActivity(intent);
https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 6/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Para este exemplo utilize a tag Permission:

1 <uses-permission android:name="android.permission.CALL_PHONE"/>

Outro exemplo, Agora iniciaremos a aplicação de câmera do Android.

A Intent abaixo irá procurar por um capaz de capturar imagens via câmera. Após o termino de
sua utilização, a imagem capturada poderá ser tratada através do método onActivityResult da
Activity que disparou a Intent.

Isto é feito porque utilizamos o método startActivityForResult para disparar essa Intent ao invés
do tradicional startActivity.
Usando esse método (startActivityForResult) estamos dizendo que esperamos uma resposta para
a requisição que estamos fazendo.

Vejamos o exemplo, logo abaixo o método que dispara a Intent de captura de imagem via
câmera:

1 public void onClickCamera(View view) {


2 Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE
3 takePictureIntent.putExtra( MediaStore.EXTRA_VIDEO_QUALITY,1);
4 startActivityForResult(takePictureIntent, TAKE_PHOTO);
5 }

onActivityResult tratando o retorno do aplicativo de câmera:

1 @Override
2 protected void onActivityResult(int requestCode, int resultCode, Intent i
3 super.onActivityResult(requestCode, resultCode, intent);
4 if(requestCode == TAKE_PHOTO && resultCode == RESULT_OK) {
5 Bitmap thumbnail = (Bitmap) intent.getExtras().get("data");
6 imageView.setImageBitmap(thumbnail);
7 }
8 }

Vamos a um exemplo de um AndroidManifest.xml, para ilustrar onde deve ficar as tags


referentes a permissões e a IntentFilter.

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 7/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

1 <?xml version="1.0" encoding="utf-8"?>


2 <manifest xmlns:android="http://schemas.android.com/apk/res/android (htt
3 package="com.loop.Paperwall"
4 android:versionCode="1"
5 android:versionName="1.0" >
6
7 <!--
8 Aqui estão as permissões logo ANTES da tag application
9 Neste exemplo estou declarando que este aplicativo irá utilizar captura
10 -->
11 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATI
12 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCA
13 <uses-permission android:name="android.permission.INTERNET" />
14 <uses-permission android:name="android.permission.CALL_PHONE"/>
15
16 <uses-sdk android:minSdkVersion="11" />
17
18 <application
19 android:icon="@drawable/ic_launcher"
20 android:label="@string/app_name" >
21 <activity
22 android:name="MessageActivity"
23 android:configChanges="keyboardHidden|orientation|screenSize
24 android:label="@string/app_name"
25 android:windowSoftInputMode="stateAlwaysHidden" >
26 <!-- As Intent Filters ficam aqui DENTRO da TAG da Activity -->
27 <intent-filter>
28 <action android:name="android.intent.action.MAIN" />
29
30 <category android:name="android.intent.category.LAUNCHER
31 </intent-filter>
32 </activity>
33 <activity
34 android:name="MainActivity"
35 android:configChanges="keyboardHidden|orientation|screenSize
36 android:label="@string/app_name"
37 android:windowSoftInputMode="stateAlwaysHidden" />
38 </application>
39
40 </manifest>

Novos exemplos de Intent serão adicionados nesse artigo com o passar do tempo. Fique atento!

Abraço e até a próxima.


ADVERTISEMENT

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 8/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Anúncios

REPORT THIS AD

REPORT THIS AD
Intent , Intent câmera Android , Intent E-mail , Intent Enviar E-mail Android ,
Telephone Intent

This entry was posted on Agosto 22, 2012, 2:58 am and is filed under Android, Câmera, Enviar E-
mail Android, Intent, Intent.ACTION_CALL, Intent.ACTION_SENDTO, Intent.ACTION_VIEW,
Telefonema. You can follow any responses to this entry through RSS 2.0. You can leave a
response, or trackback from your own site.

COMMENTS (11) TRACKBACKS (1)

#1 by Andrelino Silva on Dezembro 13, 2018 - 12:43 am

Como usar o intent para identificar se o link é para o tel: ou, Google Maps, WhatsApp e
dentre outras? Obrigado

#2 by Terrance Dellapenta on Março 22, 2017 - 10:32 am

Marvelous, what a webpage it is! This weblog gives valuable information to us, keep it up.|

#3 by Carlos on Janeiro 19, 2017 - 7:38 pm

Ótimo texto! Vai me ajudar em meus estudos.

Estou com uma dúvida. É possível inserir uma nova tela em um app já pronto e fazer com que
essa nova tela apareça primeiro? Não seria uma splashscreen, mas sim uma nova tela com
botão que, ao ser clicado, levaria ao app.

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 9/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Qual o procedimento para que isso fosse possível?

Grato

#4 by Cesar on Abril 11, 2016 - 8:23 pm

ótimo blog ,muito claro!Parabéns!!!

#5 by Lucas Hocihara on Agosto 13, 2014 - 6:04 pm

Oi, Leonardo

Me encontrei com mais um problema. No seu último exemplo, o intent de tirar fotos, o
parametro “TAKE_PHOTO” e “imagemView” não são reconhecidos pelo programa. Será que
eu coloquei os métodos “onClickCamera” e “onActivityResult” nos lugares certos? Bem, eu
coloquei eles no PerfilActivity.java,fora do onCreate, mas deu errado.

Kenji.

#6 by Lucas Hocihara on Agosto 12, 2014 - 7:29 pm

Oi,Leonardo.

Como sempre seus posts são muito bons! Parabéns de novo! Mas gostaria de saber, onde você
coloca o “”, sei que é no AndroidManifest.xml, mas é dentro de que tag? Eu estou colocando
no “”, mas quando clico no botão, ele diz que o programa parou.

código a seguir:

No PerfilActivity.java

public void Ligar(View view) {


Intent IntentPassada = getIntent();
Bundle bundle = IntentPassada.getExtras();
String telefone = bundle.getString(Login.KEY_INFO_LOGIN_TELEFONE);

Intent intent = new Intent(Intent.ACTION_CALL);


intent.setData(Uri.parse(“tel:” + 992872005));
startActivity(intent);
}

————————————————————————————————–

No AndroidManifest.xml

Se você puder me ajudar, ficaria muito grato.Muito obrigado por esta ideia de compartilhar
seu conhecimento, vc não sabe o quanto eu procurei um lugar igual a esse blog! kkk

Até mais,Kenji

#7 by Lucas Hocihara on Agosto 12, 2014 - 7:35 pm

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 10/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Observação: As partes que não apareceram são,respectivamente, ‘uses-permission’ e


‘intent-filter’.

No AndroidManifest.xml

intent-filter
action android:name=”android.intent.action.VIEW”
category android:name=”android.intent.category.DEFAULT”

action android:name=”android.intent.action.SENDTO”
category android:name=”android.intent.category.DEFAULT”

uses-permission android:name=”android.permission.CALL_PHONE”
intent-filter

Desconsidere a falta de ‘>’ e ‘<', pois se eu colocasse o codigo na apareceria kkk

#8 by Leonardo Casasanta on Agosto 13, 2014 - 3:31 am

Ola Lucas,

Obrigado pelos comentários. =]

Atualizei o final deste artigo colocando um exemplo de AndroidManifest.xml com alguns


comentários.
Veja se atende as suas necessidades. Qualquer dúvida pode postar ai.

Abraço.

#9 by Lucas Hocihara on Agosto 13, 2014 - 5:33 pm

Ah, agora entendi, muito obrigado, mais uma vez. =)

Kenji.

#10 by Leonardo Casasanta on Maio 12, 2014 - 7:50 pm

Ola Wendell, muito obrigado pelo seu comentário! Fico muito feliz com seu feedback =]

#11 by Wendell Carvalho on Maio 12, 2014 - 2:32 pm

Cara, estou me aventurando no mundo de desenvolvimento Android e queria lhe dizer que
seu blog é um oásis de informações relevantes. Sem contar a maneira bem detalhada que vc
escreve os artigos. Meus parabéns e muito obrigado pela sua atitude de propagar o
conhecimento.

1. SMS no Android! | Android On Board

Site no WordPress.com.

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 11/12
21/01/2019 Tudo sobre a classe Intent. | Android On Board

Curso
Curso de
de Farmácia
Biomedicina
Curso
Curso de
de Gestão Hospitalar
Segurança no Trabalho
Curso de Nutrição
Curso de Química (Licenciatura)

REPORT THIS AD

https://androiddevbr.wordpress.com/2012/08/22/o-poder-da-intent/ 12/12

Você também pode gostar