Notifiche avanzate e indossabili su Android

introduzione

Le notifiche sono un modo molto utile per interagire con gli utenti dell'applicazione e, con Android Wear, ora abbiamo anche dispositivi indossabili con Android. È quindi una buona idea apprendere come sfruttare queste nuove funzionalità aggiungendo azioni appropriate alle notifiche o creando azioni visibili solo su dispositivi indossabili.

In questo tutorial, ti mostrerò la moderna implementazione delle notifiche, come mostrato durante l'I / O di Google di quest'anno. Useremo il nuovo pacchetto di supporto e ne estenderemo le funzionalità aggiungendo azioni visibili solo su smartwatch, gli unici dispositivi indossabili disponibili con Android Wear al momento della scrittura.

1. Prerequisiti

Per questo progetto, puoi utilizzare Android Studio o gli Strumenti per sviluppatori Android. Se utilizzi Android Studio, assicurati di aggiungere la seguente riga al tuo build.gradle file.

compila "com.android.support:support-v4:20.0.+"

2. Impostazione del progetto

Avvia il tuo IDE e crea un nuovo progetto Android o apri un progetto che hai creato in precedenza. Per questo tutorial, ho intenzione di creare un nuovo progetto e nominarlo ImprovedNotifications. Non dimenticare di usare un nome di pacchetto univoco.

Durante l'impostazione del progetto, assicurarsi di selezionare il Attività vuota opzione nel Crea attività passo.

Una volta creato il progetto, crea una nuova attività, ActivatedActivity. Questa attività verrà chiamata da una notifica sul tuo dispositivo mobile o indossabile.

Prima di andare avanti, dobbiamo aggiornare il strings.xml file aggiungendo le stringhe che useremo un po 'più avanti in questo tutorial.

  ImprovedNotifications ActivatedActivity Ciao"!" Sono l'attività attivata Provami per una nuova notifica Ciao mamma"!" I "" "m un titolo Guardami"!" Sono un contenuto di notifica sexy Vediamo il profilo twitter dell'autore "" Io appaio solo qui 

3. Creazione del layout

Il prossimo passo è creare un layout per il Attività principale e il ActivatedActivity classi. Il layout per il Attività principale la classe è mostrata sotto.

 

E questo è il layout per il ActivatedActivity classe.

  

4. Creazione di una notifica

Creiamo una notifica nel Attività principale classe. Nello snippet di codice seguente, puoi vedere quali passaggi sono coinvolti nella creazione di una notifica. Ho commentato il blocco di codice per aiutarti a comprendere i vari passaggi, ma passiamo al snippet passo dopo passo.

pacchetto com.androiheroes.improvednotifications; importare android.app.Activity; importare android.app.Notification; importare android.app.PendingIntent; import android.content.Intent; import android.net.Uri; importare android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; importa android.view.View; importa android.widget.Button; public class MainActivity estende Activity / * Widget che intendi usare * / private Button button; / * * Questo è l'ID di notifica * È possibile utilizzarlo per chiudere la notifica chiamando il metodo .cancel () sull'oggetto notification_manager * / private int notification_id = 1; private final String NOTIFICATION_ID = "notification_id"; / * Queste sono le classi utilizzate per avviare la notifica * / private NotificationCompat.Builder notification_builder; NotificationManagerCompat notification_manager privato; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); / * * Passaggio 1 * Istanziazione del pulsante che si utilizza per avviare la notifica * / button = (Button) findViewById (R.id.notification_button); / * * Passaggio 2 * Creare l'intento che si intende avviare quando si preme la notifica * e lasciare che sia PendingIntent a gestirlo * / Intent open_activity_intent = new Intent (this, ActivatedActivity.class); open_activity_intent.putExtra (NOTIFICATION_ID, notification_id); PendingIntent pending_intent = PendingIntent.getActivity (this, 0, open_activity_intent, PendingIntent.FLAG_CANCEL_CURRENT); / * * Passaggio 3 * Qui si crea la notifica e si inizia ad aggiungere tutti gli attributi che si intende utilizzare * / notification_builder = new NotificationCompat.Builder (this) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string .notification_title)) .setContentText (getString (R.string.notification_text)) / * * Questo metodo specifica che la nostra notifica deve avere tutte le caratteristiche predefinite di una notifica * come suoni e vibrazioni * / .setDefaults (Notification.DEFAULT_ALL) / * Questo metodo sta per ignorare la notifica quando viene premuto * / .setAutoCancel (true) .setContentIntent (pending_intent); / * * Passaggio 4 * Qui viene istanziato l'oggetto Notification Manager per avviare / arrestare le notifiche * / notification_manager = NotificationManagerCompat.from (this);  @Override protected void onStart () super.onStart (); / * * Passaggio 5 * La notifica verrà visualizzata quando si preme il pulsante sullo schermo * / button.setOnClickListener (new View.OnClickListener () @Override public void onClick (View v) notification_manager.notify (notification_id, notification_builder .build ());); 

Passo 1

Prima istanziamo il pulsante che useremo per lanciare la notifica. È anche possibile creare la notifica direttamente nel onCreate metodo,ma usando un pulsante hai più controllo sul tempo esatto della notifica.

Passo 2

Nel secondo passaggio, istanziamo un Intento oggetto con l'attività da eseguire quando viene toccata la notifica. Passiamo l'oggetto a a PendingIntent istanza per gestirlo in seguito quando viene chiamato.

Passaggio 3

Utilizzando la libreria di supporto Android, creiamo la notifica usando il Costruttore classe del NotificationCompat oggetto e impostare i suoi attributi.

Passaggio 4

In questo passaggio, istanziamo a NotificationManagerCompat istanza per avviare e / o interrompere la notifica ogni volta che vogliamo. Ciò renderà il test molto più semplice.

Passaggio 5

Toccando il pulsante, la notifica viene attivata utilizzando il pulsante notificare metodo.

Non dimenticare di utilizzare le classi dalla libreria di supporto Android. In questo modo puoi essere certo che la tua notifica avrà un bell'aspetto nelle versioni precedenti di Android.

Ora puoi eseguire l'app, toccare il pulsante e visualizzare la notifica nella parte superiore dello schermo. Se tocchi la notifica, dovrebbe portarti a ActivatedActivity attività. Con la notifica impostata e funzionante, è ora di iniziare ad aggiungere azioni.

5. Aggiunta di azioni alla notifica

È possibile aggiungere ulteriori azioni alla notifica richiamando il addAction metodo sul notification_builder oggetto. Affinché funzioni, è necessario passare a PendingIntent istanza con l'attività che ti piace eseguire.

Nel seguente frammento di codice, ti mostrerò i passaggi da implementare per creare un'azione con un'attività personalizzata. In questo esempio, ti porterò al mio profilo Twitter nell'app Twitter. Questo significa che ho bisogno di un URI istanza che punta al mio profilo Twitter, aggiungere questo al Intento, e lascia che il PendingIntent maneggiarlo quando l'azione viene toccata. Inserire questo blocco di codice prima dell'istanza del file notification_builder oggetto.

 / * L'azione nella notifica del palmare deve eseguire alcune attività * In questo caso il profilo twitter dell'autore verrà aperto, nell'app twitter, quando viene cliccato * ma è possibile modificarlo con il profilo se lo si desidera;) * / Intent open_twitter_profile = new Intent (Intent.ACTION_VIEW); Uri twitter_profile_location = Uri.parse ("twitter: // user? Screen_name = @ kerpie"); open_twitter_profile.setData (twitter_profile_location); PendingIntent twitter_intent = PendingIntent.getActivity (this, 0, open_twitter_profile, 0);

Per aggiungere l'azione, richiamare il addAction metodo sul notification_builder oggetto e passare nel open_twitter_profile oggetto che abbiamo appena creato.

/ * * Qui si crea la notifica e si inizia ad aggiungere tutti gli attributi * che si intende utilizzare * / notification_builder = new NotificationCompat.Builder (this) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string.notification_title )) .setContentText (getString (R.string.notification_text)) / * * Questo metodo specifica che la notifica deve avere tutte le caratteristiche predefinite di una notifica * come suoni e vibrazioni * / .setDefaults (Notification.DEFAULT_ALL) / * Questo metodo sta per ignorare la notifica una volta che è stata premuta * / .setAutoCancel (true) .setContentIntent (pending_intent) / * * Qui puoi aggiungere azioni al tuo dispositivo palmare * semplicemente prenditi cura della quantità di azioni che aggiungi * in questo caso, come in molti altri, less is more * / .addAction (android.R.drawable.ic_dialog_info, getString (R.string.first_action), twitter_intent);

Esegui l'applicazione, tocca il pulsante per attivare la notifica e dovresti visualizzare la notifica insieme all'azione appena creata.

Mentre puoi aggiungere più azioni a una notifica usando il addAction metodo, assicurarsi che l'utente non sia sopraffatto dal numero di azioni da cui possono scegliere.

6. Supporto di Android Wear

Finora, abbiamo utilizzato le classi dalla Libreria di supporto Android per assicurarci che le notifiche vengano visualizzate anche su smartwatch con Android Wear. Puoi eseguire l'applicazione su uno smartwatch fisico o puoi provarlo sull'emulatore da Gestione dispositivi virtuali Android. In entrambi i casi, è necessario sincronizzare il dispositivo con lo smartwatch.

Prima di sincronizzare il tuo dispositivo con l'emulatore di smartwatch, devi installare l'app Android Wear, disponibile su Google Play. Dopo aver scollegato tutti gli altri dispositivi Android collegati al computer, eseguire il seguente comando dalla riga di comando.

dispositivi adb

Questo comando elenca i dispositivi connessi alla macchina di sviluppo. Dovresti vederne due, l'emulatore di smartwatch e il tuo dispositivo. Quindi eseguire il seguente comando dalla riga di comando per abilitare il port forwarding.

adb -d forward tcp: 5601 tcp: 5601

Ora puoi connettere il tuo dispositivo con l'emulatore e attivare le notifiche utilizzando l'app Android Wear. Esegui nuovamente l'app e attiva la notifica. La notifica dovrebbe essere simile a quella mostrata sotto.

7. Aggiunta di azioni solo indossabili

È possibile aggiungere azioni visibili solo sui dispositivi indossabili. Questo si ottiene invocando il addAction metodo del WearableExtender classe. Il risultato è che qualsiasi azione aggiunta attraverso il NotificationCompat.Builder la classe viene ignorata.

Come abbiamo fatto prima, per innescare l'azione, facciamo uso di un Intento e a PendingIntent istanza, ma creeremo l'azione visualizzata sul dispositivo indossabile utilizzando il Costruttore classe di uno speciale Azione classe, che fa parte del NotificationCompat classe come mostrato di seguito.

/ * Qui istanziamo l'Intento che vogliamo usare quando viene premuta l'azione nello smartwatch * / Intent wearable_intent = new Intent (this, ActivatedActivity.class); PendingIntent wearable_pending_intent = PendingIntent.getActivity (questo, 0, wearable_intent, PendingIntent.FLAG_UPDATE_CURRENT); / * Ora abbiamo un intento per il wearable creato dobbiamo creare un'azione indossabile usandolo * / NotificationCompat.Action wearable_action = new NotificationCompat.Action.Builder (android.R.drawable.ic_dialog_email, getString (R.string.wearable_action) , wearable_pending_intent) .build ();

Quindi aggiungiamo questa azione al notification_builder oggetto usando il estendere metodo come mostrato di seguito.

/ * * Qui si crea la notifica e si inizia ad aggiungere tutti gli attributi * che si intende utilizzare * / notification_builder = new NotificationCompat.Builder (this) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string.notification_title )) .setContentText (getString (R.string.notification_text)) / * * Questo metodo specifica che la notifica deve avere tutte le caratteristiche predefinite di una notifica * come suoni e vibrazioni * / .setDefaults (Notification.DEFAULT_ALL) / * Questo metodo sta per ignorare la notifica una volta che è stata premuta * / .setAutoCancel (true) .setContentIntent (pending_intent) / * * Qui puoi aggiungere azioni al tuo dispositivo palmare * semplicemente prenditi cura della quantità di azioni che aggiungi * in questo caso, come in molti altri, less is more * / .addAction (android.R.drawable.ic_dialog_info, getString (R.string.first_action), twitter_intent) / * * Qui aggiungi un'azione solo indossabile * Questa azione non sarà visibile nel dispositivo palmare * / .extend (new WearableExtender ( ) .AddAction (wearable_action));

Esegui l'app e tocca il pulsante per visualizzare la notifica sul tuo dispositivo. Dovrebbe essere diverso dalla notifica che appare sull'emulatore indossabile.

Conclusione

Gli smartwatch sono qui per rimanere, almeno per un po ', ed è quindi importante sfruttare questo nuovo modo di comunicare con gli utenti dell'applicazione. Spero tu abbia trovato il tutorial utile e non dimenticare di condividerlo se ti è piaciuto.