Android: Alarmes

AndroidIconMaker0001

 

Os exemplos de aplicações estudamos até agora tomaram decisões e, em seguida, realizaram algo. Mas se o seu aplicativo tiver que toma uma decisão, mas a ação a ser realizada só será executada daqui a 5 horas, ou amanhã à meia-noite, ou a cada 15 minutos? Nesse caso, será necessáruo criar e definir alarmes para o aplicativo. Nesta lição, eu vou começar por discutir o que os alarmes são e como eles são usados.

Em seguida, vou discutir o Android AlarmManager e as APIs que ele oferece para a definir e cancelar os alarmes. Depois disso, vou discutir os vários tipos de alarmes que o Android suporta. E, finalmente, eu vou apresentar e discutir um exemplo de aplicação que utiliza alarmes. Agora, em poucas palavras, os alarmes são um mecanismo para o envio de intents em algum ponto, ou pontos, no futuro.

E isso é útil, pois permite que um aplicativo execute algum outro código para realizar alguma ação, mesmo quando o aplicativo não está sendo executado. Uma vez que os alarmes foram criados e registrados, eles são mantidos e monitorados, mesmo que o dispositivo vá "dormir".

E como nós vamos falar mais tarde, dependendo de como você configure um alarme, se o dispositivo estiver inativo, ele poderá ser iniciado pelo alarme para executar alguma coisa ou o alarme pode ser retido até que a próxima vez que o dispositivo estiver ativo. E alarmes continuará ativo até que o dispositivo seja desligado.

No encerramento, todos os alarmes registrados serão cancelados. Para dar-lhe alguns exemplos de alarmes, uma dia desses mexendo em alguns códigos fonte do Android e me deparei com vários aplicativos que usam alarmes. Por exemplo, o aplicativo de mensagens MMS usa alarmes para iniciar um serviço que pode encontrar mensagens MMS que não foram enviadas e pode tentar envia-las novamente.

O aplicativo Configurações do Android pode tornar o dispositivo detectável através de Bluetooth. E quando se faz isso, a aplicação define um alarme, e quando o alarme dispara, o aplicativo faz com que o dispositivo não seja mais detectável. E a aplicação do telefone mantém um cache de informações do usuário.

Esta aplicação utiliza alarmes para atualizar periodicamente o cache. Se você quiser usar alarmes em seus próprios aplicativos, você fazê-lo através da interação com o serviço AlarmManager. Para obter uma referência a este serviço, você chama o o Context da classe GetSystemService, passando o nome do serviço, neste caso, alarm_Service como parâmetro.

Uma vez que você tem uma referência para o AlarmManager, você pode usar alguns de seus métodos para criar e definir alarmes. Por exemplo, você pode usar o método Set para definir um único alarme. E este método tem três parâmetros.

Um tipo, que vamos discutir em breve, que representa o momento em que o alarme deve ser desativado e uma PeningIntent, que encapsula a operação que deve ocorrer quando o alarme finalmente ficar inativo.

Você pode usar esse método, setRepeating, para definir se um alarme que vai ser executado repetidamente em intervalos específicos. Este método tem quatro parâmetros, três deles vimos no método Set, mais um long adicional que especifica a quantidade de tempo entre cada execução do alarme.

Outro método é AlarmManager setInexactRepeating. Este método é semelhante ao setRepeating, em que o alarme deve inativo periodicamente, mas este método dá Android mais flexibilidade para decidir exatamente quando disparar os alarmes.

Por exemplo, o Android pode lote vários alarmes desse tipo e executa-los, ao mesmo tempo, para não ficar ativando o dispositivo muitas vezes. E se você quer ter este tipo de comportamento, então o seu intervalo de tempo deve ser uma das seguintes constantes, que especifica intervalos de 15 minutos, 30 minutos, uma hora, 12 horas ou 24 horas.

E se você não usar uma dessas constantes, então o comportamento dos alarmes irão ser os mesmos que se você tivesse utilizado o setRepeating. Cada um dos três métodos que acabei de mostrar possuem um parâmetro chamado Type. Vamos falar sobre os tipos de alarme agora.

Android proporciona dois graus de capacidade de configuração em relação aos alarmes. Um deles tem a ver com a forma com que o tempo informado é interpretado, e o outro diz Android como responder caso o dispositivo esteja inativo quando o alarme disparar. Vejamos cada um deles. Primeiro, você se lembra que cada um dos métodos de configuração de alarme levou um long como parâmetro, e eu disse que esse long representa um periodo.

Alarmes do Android podem interpretar este valor long de duas maneiras diferentes. Uma delas, é que podemos considerá-lo como se fosse um relógio e, neste caso, o long, representa o número de milissegundos desde a meia-noite do dia 1 de janeiro de 1970.

E dois, pode ser interpretado como um tempo adicional ao relógio do sistema, ou seja, a quantidade de tempo decorrido desde o momento da última inicialização do sistema. A segunda questão, é o que o Alarme deve fazer quando o dispositivo estiver inativo. Uma possibilidade é para acordar o dispositivo e entregar a intenção.

Outra opção, é deixar o dispositivo continuar inativo, e entregar a intenção na próxima vez que o dispositivo acordar. Assim, temos quatro possibilidades, definidas como vemos a seguir. RTC_WAKEUP. Dispare o alarme no momento especificado (modo relógio).

Se o dispositivo estiver dormindo, acorde-o e entregue a intenção. RTC: dispare o alarme no momento especificado (tipo relógio), mas se o dispositivo estiver dormindo, não acorde-o agora. Em vez disso, entregue a intenção quando o dispositivo estiver próximo de acordar. E há ELAPSED_REALTIME e ELAPSED_REALTIME_WAKEUP.

Para estes dois tipos de alarmes, Android dispara o alarme depois de um tempo determinado tempo que ele foi ligado, e se o dispositivo está dormindo quando o alarme dispara, ele não vai ser acordado com ELAPSED_REALTIME. E Ele vai ser acordado com ELAPSED_REALTIME_WAKEUP.

A última parte das APIs AlarmManager que vamos discutir é o PendingIntent. Um PendingIntent detém uma intenção regular e serve essencialmente como uma permissão, em que um componente permite que um segundo componente use a intenção subjacente, como se fosse o primeiro componente.

Três métodos que podem ser utilizados para criar uma PendingIntent são getActivity, que devolve uma PendingIntent que pode ser utilizado para iniciar uma atividade. GetBroadcast, que retorna uma PendingIntent que pode ser usado para transmitir uma intenção. E getService, que devolve uma PendingIntent que pode ser usado para iniciar um serviço.

Serie: 5 - 7 - Alarms