- Learn
- Guida Android
- Le notifiche in Android
Le notifiche in Android
Gli utenti Android sono abituati a ricevere notifiche. Si manifestano con una piccola icona che appare nella cosiddetta “Notification Area” e se ne può consultare il contenuto aprendo il “Notification drawer”, una zona “a scomparsa” sul display. Oltre alla semplicità comunicativa che le contraddistingue e alla familiarità dell’utente con questo meccanismo, vale la pena trattarle in un corso di questo tipo perché offrono un esempio di segnalazione che esula dall’interfaccia dell’applicazione.
Se si osserva la figura (dalla documentazione ufficiale Android) si possono riconoscere i vari elementi che costituiscono una comune notifica. Facciamoci guidare dai numeri indicati:
- titolo della notifica (content title);
- icona grande (large icon);
- contenuto della notifica (content text);
- informazioni accessorie (content info);
- icona piccola (small icon) che di norma appare anche nella barra del display;
- ora della notifica (when) impostata dal programmatore o di default dal sistema.
La prima notifica
Visto che le notifiche appaiono in zone del display non gestite dall’applicazione, dovremo interagire con il sistema mediante un apposito servizio: il NotificationManager. Ne recuperiamo un riferimento:
NotificationManager notificationManager = (NotificationManager)
getSystemService(NOTIFICATION_SERVICE);
Nonostante la molteplicità di aspetti che contraddistinguono una notifica, ve ne sono tre assolutamente obbligatori:
- l’icona piccola;
- il titolo;
- il contenuto.
Questi saranno configurati, rispettivamente, con i metodi setSmallIcon
, setTitle
e setContentText
.
Vediamo subito un esempio:
NotificationCompat.Builder n = new NotificationCompat.Builder(this)
.setContentTitle("Arrivato nuovo messaggio!!")
.setContentText("Autore: Nicola Rossi")
.setSmallIcon(android.R.drawable.ic_dialog_email);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, n.build());
La creazione della notifica ha seguito due fasi:
- è stata costruita mediante il Builder incluso nella classe NotificationCompat. I vari metodi setter permetteranno di configurarne i molti aspetti. In questo caso, si è provveduto al minimo indispensabile;
- finita la fase di build, la notifica verrà pubblicata dal NotificationManager mediante invocazione del metodo
notify
.
La notifica ottenuta nell’emulatore – con il Notification drawer aperto – è mostrata in figura:
Collegare un’azione alla notifica
Far apparire notifiche non soddisfa le necessità dell’utente però. Egli è abituato a cliccarvi sopra per ottenere una reazione da parte dell’applicazione. Noi, proseguendo l’esempio, faremo in modo che il click sulla notifica provochi l’apertura di un’altra Activity denominata MessageActivity
.
La preparazione dell’Activity non verrà ripetuta in questa sede considerato lo spazio dedicatole nei capitoli precedenti. Ricordiamo comunque che si dovranno seguire due step fondamentali: creare la classe MessageActivity
estendendo Activity
oltre all’eventuale layout ed inserire un nodo di configurazione del nuovo componente nell’AndroidManifest.xml.
L’apertura dell’Activity avverrà mediante Intent
ma non sarà attivata subito con il metodo startActivity
bensì sarà predisposta per “usi futuri” mediante la classe PendingIntent
. Si tratta di una classe che, per così dire, conserva l’Intent e la descrizione dell’azione che esso porta con sé per poterlo attivare successivamente. Ciò che faremo sarà:
- predisporre un normale
Intent
per l’apertura dellaMessageActivity
; - creazione del
PendingIntent
sfruttando l’Intent
del punto precedente; - assegnazione del
PendingIntent
alla notifica mediante il metodosetContentIntent
delNotificationCompat.Builder
.
Di seguito le modifiche da apportare al codice precedente:
Intent i=new Intent(this,MessageActivity.class);
PendingIntent pi=PendingIntent.getActivity(this, 0, i, 0);
NotificationCompat.Builder n = new NotificationCompat.Builder(this)
. . .
. . .
.setContentIntent(pi)
.setAutoCancel(true);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
notificationManager.notify(0, n.build());
Ora, dopo l’apertura del “Notification drawer”, si potrà cliccare sulla notifica e ciò comporterà l’esecuzione dell’azione contenuta nel PendingIntent
con conseguente avvio della MessageActivity
. La notifica scomparirà dalla barra dell’applicazione non appena selezionata, merito dell’invocazione al metodo setAutoCancel
().
Notifiche con avviso sonoro
Le notifiche che appaiono sui dispositivi spesso attirano la nostra attenzione con segnalazioni sonore. Per aggiungere questa ulteriore funzionalità all’esempio, dobbiamo recuperare l’Uri del suono che desideriamo:
Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
e collegarlo alla notifica in costruzione:
NotificationCompat.Builder n = new NotificationCompat.Builder(this)
. . .
.setSound(sound);
Da questo momento la notifica sarà anche sonora.
Se vuoi aggiornamenti su Android, mobile inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Marco Agnoli, Build 2014 e le novità in MS con Satya Nadella
Marco Agnoli ci parla delle novità più importanti della Build 2014 e delle innovazioni portate da Satya Nadella come nuovo […]