Esse artigo faz parte da revista WebMobile edição 24. Clique aqui para ler todos os artigos desta edição

 

ight: normal">De que se trata o artigo:

Este artigo aborda o tema Agendamento de execução no Android através da criação de uma aplicação que dispara alarmes em horários pré-programados. Aqui vamos ver como agendar estes alarmes no sistema operacional e como armazená-los em banco de dados.

 

Para que serve:

Desenvolver aplicações onde certas rotinas executam em um determinado horário ou data. Sendo possível agendar rotinas de leitura de banco, envio de e-mail, download de arquivos de mídia e serviços de áudio, por exemplo.

 

Em que situação o tema é útil:

Quando se deseja programar a execução de uma atividade ou serviço para um momento específico no tempo, como iniciar um download durante a madrugada ou despertar você com sua música predileta pela manhã.

 

Em várias situações precisamos agendar a execução de uma aplicação e às vezes isto deve acontecer mesmo que o handset esteja “dormindo”. Exemplos comuns são o alarme ou despertador do celular, uma agenda de atividades que lhe avisa quando é chegada a hora de realizá-las ou até mesmo um processo de download ou atualização que deve ser rodado à noite.

Neste artigo você vai descobrir como agendar execuções e como programá-las com o Android, acompanhando a construção de uma aplicação de agendamento de atividades.

Conhecendo a aplicação

Para abordar o assunto proposto será desenvolvida uma aplicação de Alarmes capaz de avisar ao usuário sobre uma atividade qualquer, como ligar para um amigo ou lembrar o aniversário de alguém.

Muitos recursos podem ser utilizados em uma aplicação como esta. Um bom exemplo inicial é definir o tempo de agendamento no período de 24 horas, não permitir a seleção de sons de alarme e a adição de informações sobre o evento. Com isto, teremos uma aplicação capaz de alertar o usuário que determinada hora do presente dia chegou.

Focando neste objetivo, seremos capazes de compreender a essência do que nos propomos a fazer (vide Figura 1).

Para tanto, será utilizado o android.app.AlarmManager, uma classe que fornece acesso aos serviços de alarme do sistema. Ela possibilita o agendamento de execução de uma aplicação para algum ponto no futuro. Quando o alarme ocorre, é feito o broadcast do Intent registrado, automaticamente inicializando a aplicação alvo se esta não estiver rodando (ler Nota DevMan 1). Alarmes registrados são ignorados quando o dispositivo está dormindo (mas podem opcionalmente acordar o dispositivo), e são apagados caso for desligado ou reiniciado. Para outras operações de agendamento (ticks, timeouts, etc.) é mais vantajoso o uso de android.os.Handler.

 

Nota DevMan 1. Os alarmes nesta aplicação são definidos como Intents no Android. Todo Intent precisa ser registrado no sistema. Este registro é feito e mantido pelo Android, não necessitando de qualquer persistência fornecida pelo desenvolvedor.

 

Tendo em vista que os alarmes registrados são apagados ao desligar ou reiniciar o handset, é necessária uma forma persistente de armazenamento destes alarmes. Para isso, nada melhor do que o SQLite para resolver o problema.

Figura 1. Ocorrência do alarme às 9 horas da manhã

 

Então, para desenvolver nossa aplicação, precisaremos de três atividades, uma para listar os alarmes agendados (possibilitar o acesso ao cadastro, edição e exclusão de alarmes), outra para efetivamente agendar o alarme e, finalmente, uma atividade representativa do alarme (cuja tela é apresentada na Figura 1).

Além destas atividades estarão presentes outras duas classes destinadas ao gerenciamento do banco de dados e utilidades (entre elas o agendamento de execução). Com a aplicação estudada, vamos ao desenvolvimento.

Começando o projeto

A primeira tarefa a realizar é a criação do projeto. Para tanto, suponho que você esteja fazendo uso do Eclipse com ADT. Este plugin lhe pergunta o nome do projeto, qual o pacote e a atividade principal do mesmo. Por hora vamos nomear o projeto de AlarmProject, fornecer como pacote com.webmobile.alarm e como atividade principal AlarmHome.

Ao confirmar a criação do projeto, o arquivo AndroidManifest.xml será criado com as definicões primárias para o funcionamento da aplicação. Não podemos esquecer que utilizaremos outras atividades além desta que acabamos de criar, e para não editar várias vezes o mesmo arquivo, desde já deixamos tudo preparado. Modifique o AndroidManifest.xml de sua aplicação para que equivalha à Listagem 1.

 

Listagem 1. Código do arquivo AndroidManifest.xml

01.<?xml version="1.0" encoding="utf-8"?>

02.<manifest xmlns:android="http://schemas.android.com/apk/res/android"

03.      package="com.webmobile.alarm"

04.      android:versionCode="1"

05.      android:versionName="1.0.0">

06.    <application android:icon="@drawable/icon"

07.                        android:label="@string/app_name">

08.        <activity android:name=".AlarmHome"

09.                  android:label="@string/app_name">

10.            <intent-filter>

11.                <action android:name="android.intent.action.MAIN" />

12.                <category android:name="android.intent.category.LAUNCHER" />

13.            </intent-filter>

14.        </activity>

15.        <activity android:name=".AlarmScheduler"

16.                        android:label="@string/alarm_cad"></activity>            

17.        <activity android:name=".AlarmReceiver"

18.                        android:theme="@android:style/Theme.Dialog"></activity>            

19.    </application>

20.</manifest>

 

Nesta listagem definimos as três atividades comentadas. Vale chamar a atenção para a terceira atividade, nomeada AlarmReceiver. Esta foi mapeada nas linhas 17 e 18. Note que a única diferença desta atividade para as demais é o tema especificado como Dialog. Isto transforma o visual, criando uma dialog de forma transparente ao programador. Ou seja, ao especificar este tema o Android se responsabiliza por exibir a interface em uma Dialog, não havendo nenhuma necessidade de intervenção do desenvolvedor.

Na Listagem 1 também são utilizados os recursos do arquivo strings.xml, como o título da aplicação e da tela de agendamento (nas propriedades android:label das tags application e activity). Ainda existem muitos outros labels neste arquivo que serão utilizados pelas demais atividades no desenrolar do artigo, como os labels de menu, por exemplo. Seguindo o mesmo princípio da Listagem 1, é apresentada a Listagem 2 com o conteúdo final do arquivo strings.xml.

 

Listagem 2. Código do arquivo strings.xml

01.<?xml version="1.0" encoding="utf-8"?>

02.<resources>

03.     <string name="time">Horário</string>

04.     <string name="repeat">Repetir</string>

05.     <string name="menu_insert">Adicionar</string>

06.     <string name="menu_delete">Remover</string>

07.     <string name="alarm_cad">Agendamento de Alarme</string>   

08.   <string name="app_name" ...

Quer ler esse conteúdo completo? Tenha acesso completo