Le notifiche in Android

11 giugno 2014

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.

17_img01

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:

  1. titolo della notifica (content title);
  2. icona grande (large icon);
  3. contenuto della notifica (content text);
  4. informazioni accessorie (content info);
  5.  icona piccola (small icon) che di norma appare anche nella barra del display;
  6.  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:

17_img02

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 della MessageActivity;
  • creazione del PendingIntent sfruttando l’Intent del punto precedente;
  • assegnazione del PendingIntent alla notifica mediante il metodo setContentIntent del NotificationCompat.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.

Tutte le lezioni

1 ... 18 19 20 ... 83

Se vuoi aggiornamenti su Le notifiche in Android inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Le notifiche in Android

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy