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 Programação de Dispositivos Móveis – 7º Período 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. Programação de Dispositivos Móveis – 7º Período 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 Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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; Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver Opções para Configuração • Existem duas formas de BroadcastReceiver no Android: configurar um • 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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!!! Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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; Programação de Dispositivos Móveis – 7º Período BroadcastReceiver 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. Programação de Dispositivos Móveis – 7º Período BroadcastReceiver Interação com o usuário Programação de Dispositivos Móveis – 7º Período Dúvidas Página do Professor Mauro: http://www.dai.ifma.edu.br/~mlcsilva Programação de Dispositivos Móveis – 7º Período Próxima Aula • Desenvolvimento de um aplicativo básico usando o Google Android: Notification Programação de Dispositivos Móveis – 7º Período 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 Programação de Dispositivos Móveis – 7º Período