Páginas

quarta-feira, 21 de setembro de 2011

Criando Alertas: Alarm e Reminder


Bom, sou novo por aqui, e como não quero transformar esse post numa entrevista de emprego, vamos direto ao assunto :)

Sou iniciante em WP7, então meus posts talvez não sejam do interesse daqueles mais experientes. No entanto, sou do tipo que acha que sempre dá pra aprender um detalhezinho a mais sobre aquele assunto que você considerava dominado. E o assunto simples dessa vez vai ser a utilização de duas classes que, se não me engano, surgiram (ou se tornaram mais acessíveis) com a chegada do Mango: Alarm e Reminder.
Exemplo de Alarme no WP7. Imagem obtida de http://blogdogps.com.br/.

Estas classes podem ser muito úteis se você está desenvolvendo algo que necessite de avisos programados ao usuário. Esse foi o meu caso durante o desenvolvimento da minha primeira aplicação para WP7, um criador de alarmes pra remédios, fazendo com que o usuário não precise se preocupar em lembrar sempre de tomar esse ou aquele remédio – alarme vai tocar sempre na hora programada, e com a freqüência programada.


O uso dessas classes facilita enormemente esse trabalho, pois evita que a aplicação tenha que rodar em background de alguma forma, ou que tenha que ser iniciada (ou iniciar-se sozinha) sempre que o celular for ligado para que o alarme seja disparado no momento correto.
Vamos então à criação de um alarme:

             // Criando a instância do alarme
            var alarm = new Alarm("alarmName")
            {
                //Title = “My Alarm”,
                BeginTime = DateTime.Now.AddMinutes(5),
                Content = "Breve descrição textual",
                RecurrenceType = RecurrenceInterval.None
            };

A linha 2 contém a declaração e instanciação do alarme. O uso do “tipo” var é apenas por conveniência, mas poderia ser substituída por Alarm. Note que nessa linha, passamos no construtor uma string, que vai ser a chave desse alarme específico na lista de alarmes do Sistema. Quando quisermos procurar por um alarme específico, é ela que utilizaremos – mas, falarei disso mais adiante.

Em seguida, note que a linha 4 está comentada. Isso é porque, apesar do objeto Alarm possuir a propriedade Title, ela não pode ser alterada. No entanto, vale lembrar que essa restrição se aplica apenas a alarmes – lembretes (Reminders) podem ter seus títulos definidos. A linha 5 contém a hora em que o alarme deve soar. Nesse caso, foi definido que deve soar daqui a 5 minutos.

A 6ª linha é onde inserimos a mensagem que deve ser passada com esse alarme, o que o usuário deve ser informado quando a hora chegar.  Por fim, temos a freqüência com a qual o alarme deve se repetir. Nesse exemplo, foi definido que ele não deve se repetir com nenhuma freqüência, após tocar a primeira vez. Outros tipos de freqüência são Daily, Weekly, Monthly e Yearly.

É importante lembrar que existem outras propriedades pertencentes à classe Alarm, que também podem ser definidas. Essas propriedades são Sound e ExpirationTime. A primeira permite que você defina um som específico para ser tocado no horário determinado. Esse som deve ser referenciado a partir de algum lugar da sua aplicação, como no exemplo a seguir:
         Sound = new Uri("/Ringtones/Ring01.wma", UriKind.Relative);

Vale destacar que a propriedade Sound é exclusiva da classe Alarm, e não existe na classe Reminder. A segunda propriedade, como pode-se supor, define um DateTime no qual o alarme não será mais válido.
Exemplo de lembrete, que possui a 'função soneca'. Imagem obtida de http://www.kunal-chowdhury.com/.
Também é possível criar alarmes e lembretes de outra forma, como vou demonstrar a seguir, com a criação de um lembrete:
           Reminder
reminder = new Reminder(name);
            reminder.Title = titleTextBox.Text;
            reminder.Content = contentTextBox.Text;
            reminder.BeginTime = beginTime;
            reminder.ExpirationTime = expirationTime;
            reminder.RecurrenceType = recurrence;
            reminder.NavigationUri = navigationUri;
 
Veja que é possível setar as propriedades do lembrete (ou de um alarme) a qualquer momento após a sua criação. Veja também que ele possui a propriedade Title, como mencionado previamente, mas não dá a possibilidade de definir um som específico para ser tocado. Além disso, lembretes permitem ativar a famosa “função soneca”, adiando o alerta por períodos de tempo pré-definidos. Na sequência, lembretes também possibilitam que, quando o usuário tocar no conteúdo do alerta, seja levado a uma página específica da aplicação que criou o alarme, definida em NavigationUri.

Por fim, com os alarmes e lembretes criados, devemos adicioná-los ao escalonador do Sistema, para que ele faça o trabalho sujo por nós (ficar monitorando a hora e soar o alarme quando for pertinente). Isso é feito da mesma forma, tanto para alarmes como para lembretes:

            ScheduledActionService.Add(reminder);
            ScheduledActionService.Add(alarm);
 
Ah, é interessante dizer também como pode ser feita a
remoção de um alarme/lembrete. O método é muito simples. Lembra daquela chave
(string) que passamos para o construtor do alarme? É ela que utilizaremos para
referenciar o alarme na hora de removê-lo. É exatamente por isso que é
importante sempre definir alarmes com nomes diferentes, pois a inserção de
alarmes com o mesmo nome, se não for tratada corretamente, pode levar a um erro
na sua aplicação. O código de remoção é o seguinte:
            ScheduledActionService.Remove(name); 
Bom, esse é o básico da criação de alarmes e lembretes. Sua utilização pode ser a mais variada, dependendo do aplicativo. Espero que esse post tenha sido claro, apesar de não tão objetivo. Obviamente, ele é apenas uma introdução a essas classes. Quem tiver interesse em se aprofundar mais, pode ler e tentar reproduzir o exemplo desse link:


Bom trabalho! :)

Luca Bezerra

Microsoft Certified Professional (MCP - 70-536)
Graduado em Análise e Desenvolvimento de Sistemas - IFPE
Mestrando em Ciência da Computação - UFPE

Sobre o Autor
MeninoMieL Edmiel Leandro é o editor do MeninoMieL e do Sentir é Criar. É técnico em informática e bacharelando em Sistemas de informação pela UFRPE. Seu interesse é ter um espaço na rede que seja a sua cara!

Seja o primeiro a comentar

Postar um comentário

Populares

Marcadores

Contador

  ©WP7 Pernambuco - Todos os direitos reservados.

Criado por Dicas Blogger | Topo  

Real Time Web Analytics