Desenvolvimento de um aplicativo básico usando o Google Android (BroadcastReceiver) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do Maranhão
Objetivos Nesta aula iremos apresentar uma classe que em conjunto com as classes Notification e Service são utilizadas para criação de aplicações mais robustas. Esta classe é a BroadcastReceiver. O BroadcastReceiver é um componente do Android que responde a determinados anúncios enviados pelo sistema operacionail. Vamos entender como utilizá-la. Nosso objetivo principal é aproximar o aluno do desenvolvimento de um aplicativo básico.
Plano de Aula BroadcastReceiver O que é? Onde usar? Opções para Configuração; Usando o método sendbroadcast; Ciclo de Vida; Interação com o usuário
O que é um BroadcastReceiver? Quando a bateria do dispositivo está fraca o Android envia uma mensagem (broadcast) para todo o sistema informando que a carga da bateria está acabando, para que os aplicativos que têm interesse em receber essa mensagem possam executar uma determinada ação a partir desta informação.
O que é um BroadcastReceiver? Um BroadcastReceiver é utilizada para que aplicações possam reagir a determinados eventos gerados por um intent, que nada mais é que uma mensagem enviada ao sistema operacional; Características: Sempre é executada em segundo plano e durante pouco tempo e sem utilizar interface gráfica; Seu objetivo é receber uma mensagem e processá-la sem que o usuário perceba. É um importante passo para integrar aplicações, uma vez que elas podem trocar mensagens em segundo plano sem atrapalhar o usuário;
Onde usar? Já percebemos que uma mensagem (intent) enviada por exemplo, no modelo broadcast, pode ser interceptada por um BroadcastReceiver; O Android por exemplo dispara diversas mensagens, no estilo broadcast: Ao receber uma mensagem SMS; Ao receber uma ligação telefônica; Quando a tela do dispositivo é desligada; Quando o carregador é plugado ao dispositivo; Quando um fone de ouvido é conectado ao dispositivo; Quando o sistema é iniciado e vários outros.
Opções para Configuração Existem duas formas de configurar um BroadcastReceiver no Android: Estática: configurado no arquivo AndroidManifest.xml; Dinâmica: configurado no código de uma classe do aplicativo. As duas formas são válidas, porém existe uma grande diferença: apenas a forma estática permite que um BroadcastReceiver seja invocado mesmo que o aplicativo esteja fechado.
Configuração 1º Passo O 1º passo é criar uma classe que estenda uma classe BroadcastReceiver, o método que vamos que ter que implementar é o onreceive, que será chamado pelo Sistema Operacional quando a ação que você deseja interceptar for executada. O código para uma classe que inicie uma Activity é o seguinte: public class ExemploReceiver01 extends BroadcastReceiver { @Override public void onreceive(context context, Intent intent) { Intent i = new Intent( FAZER_ALGO ); i.addcategory( CATEGORIA ); context.startactivity(i); } } Geralmente o BroadcastReceiver será usado para: Realizar uma notificação / Iniciar um serviço / Iniciar uma aplicação.
Configuração 2º Passo O 2º passo é utilizar a tag <receiver> no arquivo AndroidManifest.xml, em conjunto com a tag <intent-filter> para definir uma ação e categoria; <receiver android:name= ExemploReceiver01 > <intent-filter> <action android:name= FAZER_ALGO /> <category android:name= android.intent.category.default /> </intent-filter> </receiver> Quando alguma intent/mensagem com a ação fazer FAZER_ALGO for disparada, a classe ExemploReceiver01 será executada em segundo plano sem interferir na tela do usuário; O método chamado será o onreceive (context, intent) que recebe como parâmetro a intent que foi utilizada para enviar uma mensagem.
Usando o método sendbroadcast Para que uma classe BroadcastReceiver seja executada, alguma mensagem (intent) deve ser enviada; Para abrir uma tela usamos o método startactivity(intent); No caso de um BroadcastReceiver o método utilizado para acioná-lo é sendbroadcast(intent); O método sendbroadcast dispara uma mensagem para todas as aplicações instaladas no celular (um broadcast); O termo broadcast é um termo comum para uma mensagem que é enviada para todo mundo ao mesmo tempo; Uma intent usada para acionar uma activity não pode ser usada para acionar um BroadcastReceiver; Lembrando: uma intent é uma mensagem enviada ao sistema operacional e todas as aplicações instaladas podem responder a ela!!!
Ciclo de Vida Um BroadcastReceiver é válido somente durante a chamada ao método onreceive(context,intent); Esse método deve consumir rapidamente a intent (mensagem) recebida e retornar rapidamente; Caso o BroadcastReceiver demore mais de 10 segundos para executar, o Android exibirá um erro chamado ANR (Application Not Responding), que nada mais é que um timeout; O que fazer com ações que serão executadas em segundo plano e que demorem mais que esse tempo (10 segundos)? Usaremos a classe android.app.service ou simplesmente Service;
Interação com o usuário Um BroadcastReceiver não deve interagir diretamente com o usuário (usando um Toast, por exemplo); Pois o usuário pode estar fazendo algo interessante e pode não querer ser incomodado; Então qual a maneira mais indicada de uma aplicação que esta executando em segundo plano interagir com o usuário? A resposta é: por meio de uma notificação.
Interação com o usuário
Dúvidas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva
Próxima Aula Desenvolvimento de um aplicativo básico usando o Google Android: Notification
Referências Google Android: aprenda a criar aplicações para dispositivos móveis com o Android SDK - Ricardo R. Lacheta, São Paulo: Novatec, 2010. Sites: http://blog.globalcode.com.br/2010/05/respondendo-eventos-noandroid.html