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.
Mostrando postagens com marcador Intent Filters. Mostrar todas as postagens
Mostrando postagens com marcador Intent Filters. Mostrar todas as postagens

sábado, 16 de abril de 2011

0 comentários

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

sexta-feira, 15 de abril de 2011

0 comentários

Intents e Intent Filters - Parte 01

Três dos principais componentes de uma aplicação - atividades, serviços e broadcast receivers - são ativados através de mensagens, chamadas intents. Mensagens intent são um facilitador para rodar bindings entre componentes da mesma ou de diferentes aplicações. O intent, um objeto Intent, é uma estrutura de dados passiva que comporta uma descrição abstrata da operação a ser realizada -ou, nos casos de broadcasts, uma descrição de algo que aconteceu e que é anunciado. Existem mecanismos separados para entregar intents para cada tipo de componente:
  • Um objeto intent é passado para Context.startActivity() ou Activity.startActivityForResult() para lançar uma atividade ou receber uma atividade existente para fazer algo novo (ele pode também ser passado por Activity.setResult() para retornar informações para a atividade que chamou o startActivityForResult().
  • Um objeto Intent é passado para Context.startService() para iniciar um serviço ou entregar novas instruções para um serviço de saída. Similarmente, um intent pode ser passado para Context.bindService() para estabelecer uma conexão entre o componente que chama e o serviço alvo. Ele pode opcionalmente iniciar o serviço se ele já não estiver rodando.
  • Objetos intent passados para qualquer método broadcast (como Context.sendBroadcast(), Context.sendOrderedBroadcast() ou Context.sendStickyBroadcast()) são entregues para todos os broadcast receivers interessados. Muitos tipos de broadcasts originam-se em código de sistema.
Em cada caso, o sistema Android encontra a atividade apropriada, serviço ou broadcast receiver para responder ao intent, instanciando-os se necessário. Não existe problema nessas mensagens de sistema: broadcast intents são entregues apenas para broadcast receivers, nunca para atividades ou serviços. Um intent passado para startActivity() é entregue apenas para uma atividade, nunca para um serviço ou broadcast receiver e assim por diante.

Objetos Intent

Um objeto intent é um conjunto de informações. Ele contém informações de interesse para o componente que o recebe (como uma ação a ser tomada e os dados de argumento) mais informações de interesse para o sistema Android (como qual categoria de componente deve manusear o intent e instruções em como lançar a atividade alvo). Mas, ele deve conter principalmente:

Nome de Componente

O nome do componente que deve manusear o intent. Esse campo é o objeto ComponentName - uma combinação de um nome completamente qualificado do componente alvo e o nome do pacote setado no arquivo de manifesto da aplicação onde o componente reside.

O nome de componente é opcional. Se ele é configurado, o objeto de Intent é entregue para uma instância da classe designada. Se ele não é configurado, o Android usa outra informação do objeto Intent para localizar um alvo que possa recebê-lo.

O nome do componente pode ser configurado por setComponent(), setClass(), setClassName() e lido por getComponent().

Ação

Uma string nomeando a ação a ser realizada -ou, no caso de broadcast intents, a ação que está sendo executada e reportada. A classe intent define um número de constantes de ação, incluindo esses:
ConstantTarget componentAction
ACTION_CALLactivityInicia uma chamada de telefone
ACTION_EDITactivityMostra dados para o usuário editar
ACTION_MAINactivityInicia a atividade que está marcada como inicial em modo vazio e com nenhum retorno
ACTION_SYNCactivitySincroniza dados no servidor a partir do dispositivo móvel
ACTION_BATTERY_LOWbroadcast receiverMostra um aviso que a bateria está baixa
ACTION_HEADSET_PLUGbroadcast receiverMostra que um fone de ouvido foi plugado no dispositivo ou desplugado
ACTION_SCREEN_ONbroadcast receiverA tela foi ligada
ACTION_TIMEZONE_CHANGEDbroadcast receiverAs configurações da zona de tempo foi mudada
Data

A URI dos dados a serem capturados e o MIME type para eles.

Category

Uma string contendo informações adicionados sobre o tipo de componentes que devem ser manuseados pelo intent.


ConstantMeaning
CATEGORY_BROWSABLEA atividade alvo pode ser chamada de maneira segura pelo navegador para mostrar dados referenciados por um link (imagem ou email, etc)
CATEGORY_GADGETA atividade pode ser embarcada dentro de outra atividade que hospede gadgets.
CATEGORY_HOMEA atividade mostra a tela home, a primeira tela que o usuário vê quando o dispositivo é ligado ou quando a tela HOME é pressionada.
CATEGORY_LAUNCHERA atividade pode ser a atividade inicial ou uma tarefa e é listada no tipo da aplicação launcher.
CATEGORY_PREFERENCEA atividade alvo é o painel de preferências


Extras

Pares chave-valor com informações adicionais que devem ser entregues para o componente manuseando um intent.

Flags

Flags de tipos diversos. 

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...