Hello word CNJ I’m Android Wear Parte 2

actions

 

Dopo aver visto (nella prima parte del mio articolo) come creare una notifica che si interfacci al meglio con Android Wear, proviamo, rimanendo per ora sempre nel campo “gestione notifiche” ad implementare delle funzioni specifiche dello smartwatch targato Google.

Dopo aver ricevuto la notifica generata dallo smartphone è possibile far svolgere al nostro orologio una “azione di risposta” che può avvenire principalmente in tre modi:

  • tramite una un “azione”;
  • tramite risposta vocale;
  • tramite una “lista” di parole predefinite.

Andiamo ad analizzare nel dettaglio i tre metodi che permettono di interagire con il nostro telefono tramite lo smartwatch.

Metodo  “Azione”

Interagiamo con il nostro smartphone tramite “Azione”, ho messo la parola azione tra virgolette poiché quello che effettivamente si andrà a creare è una nuova finestra con un bottone, accessibile tramite switch laterale svolto nell’orologio dopo aver ricevuto la notifica. Come creare una nuova azione?

Basandoci sul codice visto nella prima parte:

public class MainActivity extends Activity {

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       int notificationId = 001;
       Intent viewIntent = new Intent(this, MainActivity2.class);

       PendingIntent viewPendingIntent =
               PendingIntent.getActivity(this, 0, viewIntent, 0);

       NotificationCompat.Builder notificationBuilder =
               new NotificationCompat.Builder(this)
                       .setSmallIcon(R.drawable.ic_launcher)
                       .setContentTitle("Titolo")
                       .setContentText("TESTOO")
                       .setContentIntent(viewPendingIntent)

       NotificationManagerCompat notificationManager =
               NotificationManagerCompat.from(this);

       notificationManager.notify(notificationId, notificationBuilder.build());

		
	}
}

Rispetto al codice che genera una semplice notifica notiamo l’aggiunta di in Intent che rimanda alla classe MainActivity2 e l’aggiunta nel NotificationCompat.Builder di .setContentIntent(viewPendingIntent).

Questo metodo crea una nuova finestra/bottone che di default viene chiamata “Apri sul dispositivo” che premuto permette di aprire la classe MainActivity2 direttamente sul nostro smartwatch. È possibile creare quanti bottoni vogliamo ognuno che rimandi ad una classe specifica della nostra applicazione, o tutto ciò che possiamo fare con gli Intent. Come esempio porto l’apertura di una pagina internet specifica nel browser di default del nostro telefono.

1D_picker

Basta aggiungere un altro Intent:

Intent intent = new Intent(Intent.ACTION_VIEW);
       Uri var = Uri.parse("http://www.cosenonjaviste.it");
       intent.setData(var);
       PendingIntent intent =
               PendingIntent.getActivity(this, 0, intent, 0);

e creare una nuova azione nel Builder:

.addAction(
    R.drawable.ic_con,getString(R.string.test), 
    intent
);

Dove vengono richieste rispettivamente Immagine, testo e Intent da eseguire.

Metodo “Risposta Vocale”

Indubbiamente la risposta vocale è il metodo più efficace di comunicazione tra lo smartwatch ed il telefonino,
rispondere a messaggi , programmare azioni effettuare telefonate, tutto utilizzando la nostra voce è indubbiamente affascinate, ma è molto difficile implementare la risposta vocale alle notifiche generate dalla nostra applicazione?
La risposta è : “Assolutamente no! “

Partendo sempre dalla stessa base, ovvero la creazione di una semplice notifica, basterà avere l’accortezza di aggiungere dei parametri:

String replyLabel = getResources().getString(R.string.reply_label);

È la stringa che sarà presente nella view di risposta, solitamente potrebbe essere un messaggio tipo “Sono in ascolto” o comunque qualcosa che faccia capire all’utente che è quello il momento di parlare!

vonage_android_wear_05

Aggiungendo :

public static final String EXTRA_VOICE_REPLY = "extra_voice_reply";
RemoteInput remoteInput = new RemoteInput.Builder(EXTRA_VOICE_REPLY)
                .setLabel(replyLabel)
                .build();

 

Generiamo un istanza della classe Remote Input alla quale sottoponiamo la nostra risposta vocale che sarà definita nella stringa EXTRA_VOICE_REPLY.


NotificationCompat.Action action =
    new NotificationCompat.Action.Builder(R.drawable.ic_launcher,
        getString(R.string.rispondi), replyPendingIntent)
        .addRemoteInput(remoteInput)
        .build();

NotificationCompat.Action genera (come abbiamo visto in precedenza) l’azione e aggiungendo .addAction(action); al NotificationCompat.Builder avremo reso attiva la risposta vocale.

circle_message2_reply

Metodo di scelta tramite lista

Come ultimo metodo volevo trattare quello di scegliere una risposta tra una lista di “predefiniti”.
La selezione di frasi sono visualizzate nella stessa view della risposta vocale e appariranno dopo il bottone delle emoji.
Come prima cosa per utilizzare le risposte predefinite, dobbiamo settarle quindi nel file string.xml di android andiamo a creare un nuovo array di frasi:

<string-array name="reply_choices">
    <item>Yes</item>
    <item>No</item>
    <item>Maybe</item>
</string-array>

 

Riferendoci al metodo di implementazione della risposta vocale aggiungiamo:

reply_list

String[] replyChoices = getResources().getStringArray(R.array.reply_choices);

Ed in RemoteInput aggiungiamo .setChoices(replyChoices)

Conclusioni

Con questo articolo abbiamo chiuso il cerchio relativo alla gestione delle notifiche nel ambito Android/Android Wear.
Nella prima parte abbiamo parlato di come lo smartwatch intercetti tutte le notifiche prodotte dal nostro telefono dalla versione 4.3 di Android e di come poterne creare all’interno della nostra applicazione.
Abbiamo visto non solo come generare nuove notifiche ma come customizarle in modo che siano perfettamente integrabili con Android Wear generando/mantenendo una User Experience di alto livello.
In questo articolo invece abbiamo fatto un piccolo passo verso l’utilizzo vero e proprio della SDK di Android Wear, abbiamo visto come svolgere un azione, implementare una risposta vocale o di scelta tramite array.
Vorrei concludere riportando alcune righe lette in un libro che ho ricevuto ultimamente:
..”Cos’è che l’utente potrebbe fare sul suo telefonino che ora è possibile fare con questi dispositivi?”

Si potrebbe erroneamente pensare che Android Wear rappresenti solo un accessorio del proprio dispositivo smartphone o tablet: di fatto, una sorta di estensione delle proprie applicazioni. In realtà, un dispositivo smartwatch può essere di più. Esso non solo riceve informazioni dallo smartphone, ma consente di creare delle vere e proprie applicazioni che dialogano con la loro parte mobile con l’obbiettivo di costruire un’esperienza utente molto più ricca.

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.