2.3 Como as intents são resolvidas

As informações contidas nas Intents são utilizadas pelo Android para localizar o componente adequado, geralmente uma activity, para executar a ação desejada. Quando o nome de componente é informado, o Android inicializa exatamente aquele componente, sem necessidade de avaliar a ação ou categoria.

Por outro lado, quando o nome não é informado, é necessário consultar quais são os componentes existentes com a habilidade de executar a ação desejada e que pertencem às categorias existentes na Intent. Adicionalmente, o Android também pode procurar por componentes capazes de resolver a Uri repassada e também de lidar com o formato dos dados, o MIME type, informado.

A pergunta que deve estar latente é: como o Android sabe ou encontra a Activity que deve ser iniciada, apenas informando esses dados na Intent? A resposta é que não existe mágica e em algum lugar deve estar especificado que determinadas ações podem ser resolvidas por um dado componente.

A definição de quais ações um componente está apto a responder, bem como a quais categorias ele pertence e também quais dados ele sabe tratar, é realizada através de intent filters que são configurados no arquivo AndroidManifest.xml.

No nosso primeiro exemplo já existe a declaração de um intent filter no

AndroidManifest.xml para a Activity principal da nossa aplicação:

Este intent filter indica que a atividade MainActivity é aquela que deve ser iniciada ao abrir a aplicação e que também deve ser listada como uma aplicação do Android que pode ser utilizada por um usuário. Os intent filters podem ainda declarar, além da ação e da categoria, os tipos de dados com os quais o componente é capaz de lidar, como uma imagem por exemplo:

Com base nestas três informações ( action, category e data), o Android é capaz de selecionar qual é o componente mais adequado para responder a uma Intent implícita, comparando o que foi passado na Intent com aquilo que está declarado nos intent filters dos aplicativos. Nossas aplicações podem definir intent filters com ações e categorias próprias ou fazer uso das já existentes para expor funcionalidades para as demais aplicações.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️