Hello World CNJ I’m Android Wear

gp-wear-quality
 
Android wear è un sistema operativo basato su Android con lo scopo principale di gestire le notifiche del telefono direttamente da un accessorio indossabile come orologi ed occhiali. I primi rumor della sua esistenza risalgono al 18 marzo 2014 presentati poi, di fatto, solamente qualche mese dopo, il 25 giugno, in occasione del Google I/O 2014.

L’orologio che prende il nome di smartwatch nasce con lo scopo di “estendere” l’utilizzo del telefono, quasi come un “secondo schermo” che ci permette di visualizzare le notifiche senza accedere fisicamente allo smartphone. Infatti lo smartwatch si accoppia con il telefono (con sistema operativo Android 4.3 o superiore) tramite il Bluetooth e riceve ed invia le stringhe che compongono la notifica e la nostra eventuale risposta.

In poco più di un anno sono stati rilasciati sei aggiornamenti di sistema che hanno portato le API del dispositivo wearable dalle 20 iniziali alle 22 attuali.

Questi aggiornamenti nel tempo hanno migliorato il modo di interfacciarsi con l’utente aggiungendo, ad esempio, la possibilità di disattivare il risveglio con il movimento del polso, la gestione delle watchface e la possibilità di gestire le notifiche tramite connessione wifi (quindi senza accoppiamento diretto con lo smartphone, ultima release non applicabile a tutti i modelli).

Lo smartwatch ha il quadrante digitalizzato il che permette la più completa personalizzazione estetica modificando la watchface attualmente in uso tramite il tap prolungato sullo schermo o nella sezione impostazioni. Il dispositivo di stock mette a disposizione diverse watchface ma l’utente può aggiungerne semplicemente scaricando dal playstore quella che preferisce.

I sensori come accelerometro e giroscopio fanno salire alle stelle la user experience in quanto il classico movimento di portare l’orologio al volto per vedere l’ora innesca l’accensione dello schermo in modo da poter visualizzare l’ora corrente e predisporre il dispositivo “In ascolto” dell’ormai famosissimo comando vocale “Ok Google”.

Infatti Android wear sfrutta tutte le potenzialità di Google now, è dunque capace tramite comando vocale di effettuare ricerche, visualizzarne una piccola anteprima e magari aprirla sul telefono, avviare una navigazione, impostare una sveglia, rispondere ad un messaggio tramite l’utilizzo dello speak to text o tramite messaggi programmati e avviare telefonate o declinare quelle in arrivo il tutto senza utilizzare il telefono.

Di base il sistema wearable “intercetta” tutte le notifiche che riceve o produce il nostro smartphone; se la nostra applicazione (anche sviluppata prima dell’uscita di Android Wear) genera notifiche le stesse verranno visualizzate su Android Wear. Implementarne canonicamente la gestione aumenterà considerevolmente la UX della nostra applicazione e farlo è abbastanza semplice, vediamo alcuni esempi.

Generare notifiche con supporto ad Android Wear

int id_notifica = 001;
/* id_notifica: se dobbiamo avere la necessità di creare più notifiche se id_notifica rimane inviato la notifica verrà soprascritta.*/
NotificationCompat.Builder notificationBuilder =
    new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Titolo")
        .setContentText("Testo della notifica")

NotificationManagerCompat notificationManager = NotificationManagerCompat.from(this);
notificationManager.notify(id_notifica, notificationBuilder.build());

Il codice riportato crea una notifica standard completamente supportata da android wear, NotificationCompat.Builder si occupa di generare la notifica e settarne il titolo usando setContentTitle ed il contenuto con setContentText; è possibile gestire l’icona tramite il metodo setSmallIcon.

Partendo da questa base è possibile implementare altre proprietà nella notifica tipo che saranno mostrate nei prossimi paragrafi.

La priorità

Soprattutto in Lollipop, si ha la possibilità di gestire quali notifiche visualizzare in base alla priorità in cui vengono programmate.

Vengono gestite con .setPriority() e come da immagine possono essere:

  • Notification.PRIORITY_MAX
  • Notification.PRIORITY_MIN
  • Notification.PRIORITY_LOW
  • Notification.PRIORITY_DEFAULT
  • Notification.PRIORITY_HIGH

Alerts

Quando l’utente non sta utilizando lo smartphone e riceve una notifica ci sono diversi metodi per avvisarlo, tramite suono, tramite vibrazione,tramite LED o tramite l’unione di tutti o alcuni di questi, l’alerts vengono gestiti con l’aggiunta di .setDefaults():

  • Alert sonoro: Notification.DEFAULT_SOUND
  • Vibrazione: Notification.DEFAULT_VIBRATE
  • LED: Notification.DEFAULT_LIGHTS
  • Sonoro e Vibrazione: Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE
  • Tutti: Notification.DEFAULT_ALL

Questa implementazione è essenziale per l’integrazione con lo smartwatch, a parte l’alert sonoro che non può essere riprodotto nel dispositivo wearable a causa della mancanza di speakers, la differenza tra VIBRATE e LIGHTS è tangibile, VIBRATE innesca la vibrazione dello smartwatch appena ricevuta la notifica, mentre LIGHTS ne accenderà solamente lo schermo.

Notifiche pubbliche, private e segrete

In Android 5.0 è possibile gestire, inoltre, come visualizzare le notifiche nella Lock Screen, difatti dalle impostazioni “notifiche e suoni” possiamo decidere se visualizzare tutte le notifiche, impostare un pin per le notifiche sensibili ( verrà visualizzata una notifica con un messaggio accessibile a tutti che cambierà solamente dopo aver sbloccato il telefono con il pin) o non visualizzare nessuna notifica nella lock screen. Il tutto viene gestito dal metodo setVisibility.

Un esempio di notifica pubblica che chiameremo publicnotification è il seguente:

NotificationCompat.Builder publicnotification =
    new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Titolo")
        .setContentText("Testo della notifica pubblica")
 	.setVisibility(Notification.VISIBILITY_PUBLIC)

Se vogliamo implementare una notifica privata che chiameremo privatenotification possiamo scrivere:

NotificationCompat.Builder privatenotification =
    new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Titolo")
        .setContentText("Testo della notifica privata")
 	.setVisibility(Notification.VISIBILITY_PRIVATE)
	.setPublicVersion (publicnotification)

Come si può vedere con .setPublicVersion(publicnotification) richiamiamo la versione pubblica della notifica che sarà quella visibile nella lock screen (se impostata su privata) la quale cambierà in quella privata non appena sbloccato il dispositivo.

BigTextStyle

Se la notifica che generiamo ha un testo troppo lungo, sarà impossibile leggerne tutto il contenuto nel quadrante dello smartwatch, per questo dovremo implementare il BigTextStyle.
BigTextStyle permetterà dopo aver premuto sopra la notifica (nello smartwatch) di scorrerla come fosse contenuta in una scrollbar. Il codice per implementare questa tipologia di notifica è il seguente:

String lungtesto="…..Testo big notifica…..";
NotificationCompat.BigTextStyle bigStyle =
    new NotificationCompat.BigTextStyle();
bigStyle.bigText(lungtesto); 

NotificationCompat.Builder bignotifica =
    new NotificationCompat.Builder(this)
        .setSmallIcon(R.drawable.ic_launcher)
        .setContentTitle("Titolo")
        .setContentText("Testo della notifica")
        .setVisibility(Notification.VISIBILITY_PUBLIC)
        .setStyle(bigStyle);

Conclusioni

In questo post abbiamo visto come creare una notifica dal nostro terminale Android in modo da interfacciarsi al meglio con Android wear. Utilizzare gli Alerts e impostare la priorità della notifica sono spesso feature non considerate ma molto efficaci al fine di migliorare l’esperienza lato utente.
Implementare il BigTextStyle diventa “Essenziale” per la lettura di una lunga notifica che altrimenti non potrebbe essere letta su di uno piccolo schermo come quello dello smartwatch rimanendo inevitabilmente troncata.

Essendo quello delle gestione delle notifiche un argomento molto vasto ho deciso di dividerlo in due parti, nella seconda parte l’idea era quella di entrare nello specifico con l’implementazione delle azioni ed il supporto vocale tramite i quali saremo in grado di inviare stringhe allo smartphone e fargli eseguire un azione specifica. Stay tuned!

Marco Perugini

Nato a Macerata nel '92 , Studente d' Informatica all'Università di Camerino. co-founder e developer del GDG di Camerino e Public Relation per il CameLUG ( Camerino Linux User Group). Last but not least Programmatore e Amante Android.