300x250 AD TOP

Blogger news

AD (728x90)

Tecnologia do Blogger.

Colaboradores

Seguidores

Postagens populares

Tagged under:

Funcionalidades de uma Intent – Parte III


Nos posts anteriores desta série aprendemos sobre o conceito de Intent, e as duas principais formas de invocar uma Activity através de uma Intent. Agora nessa post irei mostrar para vocês uma outra funcionalidade de uma Intent, que são Objetos de uma Intent, estas que iram ajudar até a entender melhor o funcionamento do AndroidManifest.xml e suas Activities.

Objetos de uma Intent

Uma Intent pode armazenar diversos tipos de informações, como: uma Action (ação), Data (dados), Category (categoria) e Extras (informações extras). Estas informações armazenadas em uma Intent são recebidas pelos componentes do Android que têm interesse em recebê-las. 
Como exemplo, temos uma Intent que solicita ao Android a realização de uma chamada telefônica. Para que isto seja possível, esta Intent deve declarar em seu conteúdo o nome da Action de Telefonia e o número para o qual deseja realizar a chamada.

Veja no trecho de código abaixo como é simples realizar esta tarefa no Android:


/** 
* Declara, no construtor da Intent, a Action que será chamada. 
* Em nosso caso, a Action de chamadas telefônicas. 
*/ 
Intent i = new Intent(Intent.ACTION_CALL); 
/**
*Define o conteúdo a ser passado para a Action 
* de chamadas telefônicas. Em nosso caso, o número 
* de telefone para o qual desejamos ligar. 
*/ 
i.setData(Uri.parse("tel:8111-1111")); 
  
// Inicia a Action definida na Intent 
startActivity(i);
No trecho de código acima, a Intent declara que deseja chamar a Action que responde pelo nome Intent.ACTION_CALL. Nesta Intent definimos também o dado que queremos passar para esta Action e, em nosso caso, passamos o número de telefone para o qual desejamos realizar a chamada. Ao chamar o método startActivity(), passando a Intent como parâmetro, o Android irá receber a solicitação e irá chamar a Action que tem o interesse de receber este tipo de informação, no caso, a Action ACTION_CALL.
Além da Action (como exemplo, a que usamos no trecho de código acima para chamar a Action de telefonia do Android) e do Data (como exemplo, o número de telefone que passamos para a Action de telefonia através do método setData()), existem outros tipos de objetos que podemos armazenar nas Intents.

Action

Uma Action é uma String passada como parâmetro para o construtor de uma Intent informando a ação que queremos executar no Android. Essa String deve ser única em todo o sistema, portanto, para que não haja conflito entre nomes de Actions diferentes, é aconselhável o uso da mesma convenção de nomes de pacotes do Java para nomear uma Action.

Nota
Lembre-se que no exemplo anterior, onde usamos uma Intent para realizar uma chamada telefônica para um número, usamos uma Action chamada ACTION_CALL nativa do Android.

Para uma Action de cadastro de pessoas, por exemplo, poderíamos usar o seguinte nome: 
 
br.com.empresa.projeto.action.CADASTRO_PESSOA.  
O trecho de código abaixo mostra como seria a chamada para esta Action, no Android: 

Intent i = new Intent("br.com.empresa.projeto.action.CADASTRO_PESSOA"); 
startActivity(i); 
Veja, na tabela abaixo, algumas das Actions nativas do Android.


Constante Tipo de componente Ação
ACTION_CALL Activity Inicia o aplicativo de telefonia
ACTION_EDIT Activity Exibe tela para edição de um determinado dado
ACTION_MAIN


Activity Abre a Activity inicial de um aplicativo
ACTION_SYNC Activity Sincroniza os dados do dispositivo com os dados do servidor
ACTION_BATTERY_LOW Broadcast Receiver Aviso de bateria fraca
ACTION_HEADSET_PLUG Broadcast Receiver Aviso de handset plugado ou desplugado do dispositivo
ACTION_SCREEN_ON Broadcast Receiver Aviso de tela acesa

A tabela acima mostra apenas algumas das Actions mapeadas na classe Intent. Existem diversas outras Actions nativas e você pode ver a lista completa na documentação da classe Intent, no site do desenvolvedor Android, através do link:

Nota
Uma Action nativa do Android muito importante que você deve memorizar é a ACTION_MAIN. Esta Action é responsável por definir a Activity inicial de um aplicativo, ou seja, sempre que você definir esta Action no Intent Filter de uma Activity ela será a Activity principal do aplicativo.

Data

O Data é uma informação a mais que podemos definir na Intent para especificar melhor qual componente será associado à nossa Intent. No Data podemos definir dois tipos de informação: URI e data type. Veja novamente o exemplo de uma Intent que utilizamos anteriormente para realizar uma chamada telefônica: 
Intent i = new Intent(Intent.ACTION_CALL); 
i.setData(Uri.parse("tel:8111-1111")); 
startActivity(i); 
No exemplo, ao declarar a ACTION_CALL para realizar chamadas telefônicas, usamos justamente uma URI para informar à esta Action o número de telefone para o qual desejamos chamar.
A URI é definido na Intent através do método setData(). No trecho de código acima, usamos a seguinte URI: "tel:8111-1111"

A URI acima irá pedir para a ACTION_CALL discar para o número 8111-1111.
Cada Action possui um formato específico de URI, utilizado para executar ações de acordo com os dados informados. Um outro exemplo é quando em nosso aplicativo queremos que, quando o usuário clicar em um botão, o Browser do Android seja aberto em uma página específica da Web. Para isto existe uma action chamada ACTION_VIEW que, quando informamos em sua URI o endereço de um site, o Browser será invocado e direcionado para o endereço do site informado.

Veja um exemplo no trecho de código abaixo: 
 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setData(Uri.parse("http://www.google.com.br")); 

No trecho de código acima informamos para a ACTION_VIEW a URI “http://www.google.com.br” informando que desejamos que o Browser abra a página Web do Google.
Perceba que enquanto a Action determina a ação a ser executada, a URI determina como deve ser feito. A ACTION_VIEW, por exemplo, pode ser usada para diversos fins, dependendo da URI recebida, como por exemplo, abrir uma imagem no aplicativo de visualização de imagens do Android, abrir um arquivo de áudio do aplicativo de Sons, mostrar os contatos armazenados o aplicativo de Contatos do Android, etc.

Veja o exemplo de uma URI passada para a ACTION_VIEW para mostrar os contatos armazenados no Android: 
 
Uri uri = Uri.parse("content://contacts/people/"); 
Intent i = new Intent(Intent.ACTION_VIEW, uri); 
startActivity(i); 
 
Além do URI, outra informação que podemos passar no Data de uma Intent é o Data Type. O Data type especifica o Mime Type do arquivo definido na URI e é definido através do método setType() da Intent. Imagine, por exemplo, que através de uma Intent você queira chamar um componente do Android para abrir um arquivo de imagem com a extensão .JPG. Para isto, no URI da Intent você pode especificar o caminho deste arquivo e no Data Type especificar o tipo deste arquivo para
que o Android decida qual o melhor componente para abri-lo. Veja o exemplo: 
 
Intent i = new Intent(Intent.ACTION_VIEW); 
i.setData(Uri.parse("/caminho/do/arquivo.jpg")); 
i.setType("image/jpeg"); 
Category

Uma Category (categoria) é uma String que passamos para a Intent informando qual o componente mais adequado para executar a ação solicitada pela Intent. O uso da Category é aconselhável para especificar mais detalhadamente o componente que melhor atenderia uma determinada solicitação. Veja abaixo o exemplo da definição de uma Category em uma Intent: 
 
Intent i = new Intent("br.com.nasemanadaprova.projeto.action.CADASTRO_PESSOA"); 
i.addCategory("br.com.nasemanadaprova.projeto.category.PESSOA_JURIDICA"); 

No exemplo acima, definimos a Action no construtor da Intent e, logo em seguida, definimos a Category através do método addCategory() da Intent.
Perceba que nossa Intent chama uma Action responsável pelo cadastro de pessoas, chamada CADASTRO_PESSOA.

Imagine que esta Action abra uma tela com o formulário para preenchimento dos dados da pessoa que queremos cadastrar. Para tornar as coisas mais específicas, informamos na Category que queremos cadastrar uma pessoa jurídica e, desta forma, podemos ter Activities distintas para cadastro de pessoa física e jurídica, definindo telas distintas com campos específicos de cada caso.

Nota
Ao contrário da Action, é possível especificar mais de uma Category em uma Intent. Para especificar mais de uma Category, basta chamar novamente o método addCategory() informando as demais Categories desejadas.

Extras

Extras são informações adicionais que desejamos transmitir para o componente que irá executar a ação definida na Intent.
Podemos passar qualquer tipo de Objeto do Java como informação Extra. Estas informações são definidas em pares de CHAVE / VALOR. Veja o exemplo: 

 
/** 
* Define a Action de edição das informações do cadastro 
* de uma pessoa. 
*/ 
Intent i = new Intent("br.com.nasemanadaprova.projeto.action.CADASTRO_PESSOA "); 
/** 
* Informamos o ID da pessoa cadastrada 
* que queremos editar suas informações. 
* Neste caso, estamos informando o ID 10. 
*/ 
i.putExtra("id", 10L); 

No exemplo acima nós definimos na Intent que queremos chamar a Action CADASTRO_PESSOA responsável pela edição das informações do cadastro de uma pessoa. Logo em seguida, através do método putExtras() .

Para ler as informações Extras através do componente que as recebeu, basta usar o método getExtras() da Intent. Veja o exemplo no trecho de código abaixo: 
 
Bundle b = getIntent().getExtras(); 
long id = b.getLong("id"); 

Você deve ter notado que esse post ficou grande, comparado aos seus anteriores, fiz isso porque os assuntos Action, Data, Category e Extras pertensem ao conteúdo Objetos de uma Intent então para não subdividir esse item resolvi estender um pouco mais o post para que este ficasse completo.

Qualquer sugestão ou duvida pode deixar um comentário.

0 comentários:

Postar um comentário