Sei sulla pagina 1di 7

SCIENZE E TECNOLOGIE INFORMATICHE

Alarm Manager e Broadcast


Receiver
Progetto Android 2013
Davide.bartolucci2@studio.unibo.it
26/09/2013

Tesina Mobile Web Design di Bartolucci Davide

Introduzione
Per poter creare una sveglia indispensabile saper utilizzare lalarm
manager.
Questo particolare strumento pu essere utilizzato anche per poter
effettuare una operazione in automatico dopo un certo numero di minuti o
ore, grazie anche allaiuto del Service Broadcast.
Nellesempio che andremo a vedere successivamente per poter creare un
Alarm manager, mi aiuter con una classe Alarm di appoggio; questultima
classe mi servir per incapsulare i dati pi importanti da inserire
nellalarm manager.
Alarm quindi contiene:

1. Lora impostata dallutente, e una funzione


per sapere se la sveglia attiva o meno

2. La Vibrazione impostata dallutente nelle


impostazioni dellapplicazione

3. La descrizione della sveglia,


settata anchessa nelle impostazioni

Alarm Manager
Per prima cosa inizializziamo lAlarm Manager, in questo modo:
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Adesso visto che stiamo inizializzando una nuova sveglia, grazie ad un


Pending Intent cancelliamo i processi creati precedentemente in modo
tale che due sveglie non vadano in conflitto.

Le istanze di questa classe vengono creati con getActivity ( Context , int ,


Intent , int ) , getActivities ( Context , int , Intent [ ] , int) ,
getBroadcast ( Context , int , Intent , int) , e getService ( Context , int ,
Intent , int);
Un'applicazione pu creare un Pending Intent in modo che questultima
possa passare un azione da esso eseguita ad altre applicazioni che
eseguono questo pendingintent come se l'applicazione originale lo stesse
eseguendo.
A questo punto dobbiamo calcolare il tempo che intercorre da quando
viene impostata la sveglia allorario impostato dallutente.
Questo avviene inizializzando due Calendar:

Il primo viene implementato con lora e i minuti impostati dallutente e il


secondo,

impostiamo lora corrente (azzerando i secondi in tutti e due i calendar).


A questo punto non ci resta altro che calcolare la differenza tra reveil e
cal.

Sommando la differenza tra i due calendar allora dellimpostazione della


sveglia, ricaveremo il tempo rimanente al suono di questultima.
Grazie a questa somma da noi calcolata, possiamo settare lAlarm Manager
e inviare il nostro processo al Receiver con il Pendingintent.
Il toast ci servir per capire se la nostra sveglia sia stata impostata
correttamente!
Codice Completo:

Broadcast Receiver
I Broadcast Receivers sono uno dei componenti pi importanti
nell'architettura Android.
Questi componenti sono in ascolto di determinati messaggi, chiamati
Intents Broadcast.
Per comprendere meglio la loro natura e il loro comportamento dobbiamo
capire cosa sono gli Intents Broadcast .
Gli Intents Broadcast sono un particolare tipo di Intent che vengono
spediti attraverso il metodo sendBroadcast().
Vengono utilizzati per notificare alle applicazioni del sistema che sono in
ascolto, determinati eventi, in modo che possano reagire.
Android fa un uso molto esteso di Broadcast Intents: informazioni sulla
batteria scarica, cambiamenti della connessione, chiamate e sms in arrivo
sono degli Intents Broadcast.
Come detto sopra i Broadcast Receivers sono componenti in ascolto di
questi tipi di messaggi.
Creare un nuovo Receiver una operazione semplice, sufficiente:
creare una classe che estende BroadcastReceiver
fare un override del metodo astratto onReceive

registrare il nostro Receiver attraverso il Manifest (staticamente)


o dinamicamente attraverso il codice

Come possiamo vedere dal codice precedentemente postato, allo scadere


del tempo (impostato dalla sveglia) il Receiver ci porter direttamente in
un Activity.
In questa Activity ho implementato una Animazione e sotto ad essa due
bottoni, il primo che disattiva la Sveglia e il secondo che la ritarda.
A questo punto ci rendiamo conto che abbiamo tutte le capacit per poter
implememtare la funzione POSPONI della sveglia, cio ritardarla di
qualche minuto.
Per la funzione posponi ci baster ritardare il suono della sveglia
creandone una nuova quando lutente cliccher su un bottone.
Per comodit il tempo del ritardo lo faremo scegliere allutente nelle
impostazioni.
Vediamo ora il codice che sar analogo alla creazione della sveglia con una
piccola modifica nellimplementazione.
Per prima cosa: stessa inizializzazione della sveglia e stessa cancellazione
di sveglie antecedenti a questultima.

La seconda fase dellimplementazione lunica con un piccolo accenno di


modifica, infatti ci aiuteremo con i Shared Preferences per poter
utilizzare i minuti di ritardo scelti dallutente delle impostazioni.

Come vediamo dallesempio ci baster utilizzare il comando reveil.add


dove gli passiamo Minuti Posponi che la nostra variabile passata grazie
alle Shared Preferences.
Adesso come spiegato nelle pagine precedenti ci baster calcolare
,nuovamente, la differenza tra la sveglia impostata con laggiunta dei
minuti di ritardo e lorario corrente:

In questo modo grazie allaiuto delle Shared Preferences, dellAllarm


Manager e del Broadcast Receiver siamo riusciti a creare una Sveglia
completa che include anche la funzione Posponi.