Caso prefira, você encontrará todo esse material, em inglês, no site do Developer Android. A tradução e comentários dos materiais eu faço livremente para ajudar a comunidade que fala português.

sábado, 16 de abril de 2011

Intents e Intent Filters - Parte 02

Resolução do Intent

Intents podem ser divididos em dois grupos:

  • Intents explicitos designam o componente alvo pelo nome. Já que os nomes dos componentes normalmente não são conhecidos pelos desenvolvedores de outras aplicações, intents explícitos são tipicamente usados para mensagens internas à aplicação - como uma atividade iniciando um serviço subordinado ou lançando uma atividade irmã.
  • Intents implicitos não nomeiam um alvo. Intents implicitos são normalmente usados para ativar componentes em outras aplicações.
O Android entrega um intent explicito para uma instância de uma classe alvo designada. Nada no objeto intent que não o nome importa para determinar que componente deve usar o intent.

Uma estratégia diferente é necessária para intents implicitos. Na ausência de um alvo determinad, o sistema Android deve encontrar o melhor componente (ou componentes) para manusear o intent - uma atividade única ou serviço que realize uma ação de requisição ou um conjunto de broadcast receivers para responder ao anúncio do broadcast. Ele encontra o melhor componente comparando o conteúdo do objeto Intent nos intent filters, estruturas associadas com componentes que podem potencialmente receber intents. Filtros anunciam as capacidades de um componente e delimitam os intents que podem manuseá-lo. Eles abrem o componente para a possibilidade de receber intents implicitos de um tipo anunciado. Se um componente não tem quaisquer intent filtes, ele pode receber apenas intents explícitos. Um componente com filtros podem receber ambos tipos de intents.

Apenas três aspectos de um objeto Intent são consultados quando o objeto é testado contra um intent filter:
action
dados (ambos URI e tipo de dados)
category

Intent filters

Para informar ao sistema quais intents implicitos podem ser manuseados, atividades, serviços e broadcast receivers podem ter um ou mais intent filters. Cada filtro descreve a capacidade do componente ou um conjunto de intents que o componente poderá receber. Isso, em efeito, filtra intents de um tipo desejado enquantro filtra intents não requeridos - mas apenas intents implicitos não requeridos. Um intent explícito é sempre entregue para seu algo, não importa o que ele contenha: o filtro simplesmente não é consultado. Mas um intent implícito é entregue para um componente apenas se ele pode passar por algum dos filtros do compente que se quer que seja o alvo.

Um componente tem filtros separados para cada trabalho que ele pode fazer.

Um intent filter é uma instância da classe IntentFilter. Contudo, já que o sistema Android deve saber sobre as capacidades de um componente antes que possa lançá-lo, intent filters são geralmente configurados no manifesto da aplicação. Uma exceção seriam filtros para broadcast receivers que podem ser registrados dinamicamente chamando Context.registerReceiver().

Um filtro tem campos que são paralelos à ação, dados e categoria de um objeto Intent. Um intent implicito é testado contra o filtro em todas essas áreas. Para ser entregue para o componente que é dono do filtro, ele deve passar em todos os testes. Se ele falha em apenas um, o sistema Android não fará a entrega deste ao componente. Contudo, caso o componente tenha múltiplos intent filters, um intent que não passou poderá passar através de outro intent filter.

Os três testes que são feitos são:

Action test
Category test
Data test

0 comentários:

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Related Posts Plugin for WordPress, Blogger...