Por mais simples que seja um aplicativo, encontramos várias telas, serviços e funcionalidades. Porém, para que seja possível interagir com o aplicativo, é necessário o envio de uma “intenção” para o Sistemas Operacional (SO) de forma que o mesmo possa realizar a tarefa, como por exemplo, acessar um determinado serviço, abrir a câmera o dispositivo ou até mesmo abrir o navegador de Internet. Essa “intenção” pode ser executada criando uma Intent, que segunda a documentação oficial se resume em:

Objeto de mensagem que pode ser usado para solicitar uma ação de outro componente de aplicativo. [1]

Assim como a Activity, a Intent é um dos pilares da Arquitetura do Android, e seu claro entendimento é crucial para a criação de aplicativos para essa plataforma. Para que uma Intent possa ser executada pelo SO não basta apenas criar o objeto Intent, porém, após criá-lo, deve ser chamado o método startActivity(Intent intent) ou startActivityForResult(Intent intent, int requestCode).

Tipos de Intent:

Existem dois tipos de Intents:
  • Intent Explícita: especificam o componente que será iniciado pelo nome. Normalmente usando para acionar algum componente no próprio aplicativo, como por exemplo: para abrir uma nova atividade quando o usuário aciona algum botão.

  • Intent Implícita: Diferente da explícita, não é informado o nome do componente especificamente, e sim a ação que na qual existe a intenção de executar/realizar. Este tipo de intent é normalmente usado para acessar um serviço esterno ao aplicativo, como por exemplo: solicitar uma localização no mapa, ou abrir uma página no navegador de Internet.

Funciona da seguinte forma:

  1. Activity A cria uma intent com a ação que deseja executar
  2. Levando em consideração a ação passada, o Android filtra todos os aplicativos capazes de executar tal ação
  3. O Android chama o onCreate() da Activity B do aplicativo que executará a ação

 
 
 
 
 
 
 
 

 

 

Criando novas Intents:

O Sistema Android possui algumas informações com quais ele determina quais componentes deve ser iniciado. O Intent por sua vez, carrega algumas dessa informações, que basicamente são:

  • Nome do componente: Esta informação é que o diferencia se uma Intent é explícita ou implícita.
  • Ação: É especificada como String, e é o que estrutura a Intent. No caso de Intents do tipo implicita, será a ação a ser executada e que está em vigor.

               Ex: ACTION_SEND, ACTION_VIEW

  • Extras: Utilizado para propagar informações necessárias para a realização da tarefa. Um exemplo claro é quando uma Activity B necessita de informações da Activity A, neste caso A envia informações extras para B. Para isto são utilizados pares de chave-valor.

Recuperando o valor na Activity B:

Também é possível criar uma objeto do tipo Bundle inserindo nele os dados extras, e passar para a Intent o próprio Bundle:

Criando uma Intent para abrir uma nova Activity:

Perceba que neste exemplo foi usado startActivityForResult(). Neste caso hipotético o retorno da Activity Pessoa.class pode ser acessado no método onActivityResult().Criando uma mensagem de texto:

Em um dispositivo pode haver mais de uma aplicativo de envio de mensagens, quando isto acontece o Android lista todos os aplicativos candidatos para o envio de mensagem em um dialog. Assim o próprio usuário pode escolher pode onde enviará a mensagem. Se o Android só encontrar apenas um aplicativo de envio de mensagens, este app será aberto automaticamente. Obs: A verificação para saber quais apps podem executar a ação enviada no Intent é realizada na chamado do método startActivity();

Forçando o seletor de aplicativos:

Quando há mais de uma aplicativo ativo para realizar a tarefa de uma Intent implícita, o usuário tem a possibilidade de tornar algum aplicativo listado pelo Android como padrão para aquela tarefa, porém, algumas vezes é necessário formar a listagem dos aplicativos. Podemos tomar como exemplo um app que compartilha texto, neste caso o usuário pode compartilhar com vários app diferentes. Para forçar o seletor de aplicativos para usar o método createChooser():

Assim sempre será exibido o dialogo com todos os apps que podem executar a tarefa ACTION_SEND.

Tornando o app apito para executar uma ação: Intent Filter

Para que o Android saiba que uma determinada aplicação pode executar uma ação, ACTION_SEND por exemplo, é necessário que seja informado no AndroidManifest.xml criando um filter. Um filter deve conter no mínimo 1 das 3 informações listadas:

  • Action: Ação que pode executar. Deve ser o valor da String da ação, e não a constante da classe. Para a ação ACTION_SEND o valor é SEND, por exemplo.
  • Data: Tipo de dado aceito. Por exemplo: text/plain
  • Categoriy: Categoria do Intent aceito. Deve ser o valor da String literal.

Conclusão

Embora o Intent seja uma das classes mais importantes no desenvolvimento de aplicativos para Android, sua utilização não é nada complicada, pelo contrário. Lembre-se sempre de visitas a documentação oficial do Android para tirar suas dúvida, e aproposito, foi de lá que todos os conceitos, e a maioria dos exemplos, apresentados aqui foram tirados.

Referência

[1] https://developer.android.com/guide/components/intents-filters.html#Types