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
Leia Mais >>