sábado, 3 de março de 2012

Android: Conexão bi-direcional, Activity-Service via um CallBack

 Este tutorial foi publicado no Portal Android.

 Estou publicando uma serie de estudos no meu blog Agorandroid. Este tutorial é sobre uma cópia do projeto que publiquei lá (aqui GPS), com a diferença de que o serviço de coleta aqui será feito por um service.
 O projeto é bem simples, o objetivo é mostrar a técnica de conexão. O app coleta os dados do provedor de GPs, essa coleta é feita por uma classe filha de service e transfere para a activity que mostra alguns campos do Location recebido. Isso é só para poder acompanhar visualmente. Normalmente gravariamos os dados num banco local ou remoto. Este tutorial trata da conexão entre Activity e Service. Mas não da maneira tradicional, vamos usar uma técnica muito usada no Android chamada de CallBack (via um Listener). Com ela recebemos os avisos dos eventos ocorridos no service diretamente logo após ocorrerem. Como isso é feito? Primeiro pegamos uma referência do objeto que pretendemos ter acesso, depois, nos cadastramos para recebermos os retornos do objeto conectado. Para isso usaremos uma interface muito simples com apenas um método declarado.
 Nome: OnLocListener.java
 Através da implementação dessa interface na activity vamos receber os dados do service. Vamos usar um bound service, que é um serviço que fica conectado ao componente que o chamou através do
bindService.

Não vou comentar muito sobre essa parte do bind porque isso está muito bem documentado no Dev Guide do Android. Os seguintes métodos do service são utilizados pela activity: startColeta, stopColeta e setOnLocListener.
 O fragmento de código seguinte lembra algum outro?
 Registramos o listener logo após a conexão ser completada. Através dos botões fazemos start e stop da coleta dos dados do GPS. No service registramos o listener pelo nome da interface na variável:
 E passamos os dados assim, usando o listener setado antes:
 Só para lembrar, o tutorial não é sobre o GPS. Ele foi usado devido ao fato de que serve muito bem ao propósito de mostrar os dados fluindo de um componente ao outro; sem ser de uma maneira artificial já que os dados são reais. Já que falei do GPS, não esqueçam de incluir a permissão no manifest.

 Vamos aos códigos.

OnLocListener.java

TesteGPS_xxActivity.java

TesteGPS_xxService.java


 main.xml


Bons códigos!

Nenhum comentário:

Postar um comentário