Forbedrede og slitesterke varsler på Android

Introduksjon

Meldinger er en veldig nyttig måte å samhandle med brukerens applikasjon, og med Android Wear har vi nå også bærbare enheter som kjører Android. Det er derfor en god ide å lære å utnytte disse nye funksjonene ved å legge til rette handlinger for varsler eller ved å opprette handlinger som bare er synlige på bærbare enheter.

I denne opplæringen skal jeg vise deg den moderne implementeringen av varsler, som vist i årets Google I / O. Vi bruker den nye støttepakken og utvider mulighetene ved å legge til handlinger som bare er synlige på smartwatches, de eneste bærbare enhetene som er tilgjengelige med Android Wear når de skrives.

1. Forutsetninger

For dette prosjektet kan du bruke enten Android Studio eller Android Developer Tools. Hvis du bruker Android Studio, må du sørge for å legge til følgende linje i din build.gradle fil.

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

2. Sette opp prosjektet

Start din IDE og opprett et nytt Android-prosjekt, eller åpne et prosjekt du tidligere har opprettet. For denne opplæringen skal jeg lage et nytt prosjekt og nevne det ImprovedNotifications. Ikke glem å bruke et unikt pakkenavn.

Når du setter opp prosjektet, må du kontrollere at du velger Tom aktivitet alternativ i Opprett aktivitet skritt.

Når prosjektet er opprettet, opprett en ny aktivitet, ActivatedActivity. Denne aktiviteten skal bli kalt fra et varsel på mobilen din eller bærbar enhet.

Før vi går videre, må vi oppdatere strings.xml fil ved å legge til strengene som vi skal bruke litt senere i denne opplæringen.

  ImprovedNotifications ActivatedActivity Hei "!" Jeg er den aktiverte aktiviteten Prøv meg for et nytt varsel Hei mamma"!" Jeg er en tittel Se på meg"!" Jeg er "" et sexy varselinnhold La "'s se forfatterens twitterprofil Jeg vises bare her 

3. Lag oppsettet

Det neste trinnet er å lage en layout for Hoved aktivitet og ActivatedActivity klasser. Oppsettet for Hoved aktivitet klassen er vist nedenfor.

 

Og dette er oppsettet for ActivatedActivity klasse.

  

4. Opprette en varsling

Vi lager et varsel i Hoved aktivitet klasse. I kodestykket nedenfor kan du se hvilke trinn som er involvert i å opprette et varsel. Jeg har kommentert kodeblokken for å hjelpe deg med å forstå de ulike trinnene, men la oss gå gjennom koden trinn for trinn.

pakke com.androiheroes.improvednotifications; importer android.app.Activity; importer android.app.Notification; importer android.app.PendingIntent; importer android.content.Intent; importer android.net.Uri; importere android.os.Bundle; importer android.support.v4.app.NotificationCompat; importer android.support.v4.app.NotificationManagerCompat; importer android.view.View; importer android.widget.Button; offentlig klasse MainActivity utvider Aktivitet / * Widgets du skal bruke * / privat knappeknapp; / * * Dette er varslings-ID * Du kan bruke den til å avvise varselet som kalver metoden .cancel () på notification_manager-objektet * / private int notification_id = 1; privat endelig streng NOTIFICATION_ID = "notification_id"; / * Dette er klassene du bruker til å starte varslingen * / private NotificationCompat.Builder notification_builder; privat NotificationManagerCompat notification_manager; @Override protected void onCreate (Bundle savedInstanceState) super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); / * * Trinn 1 * Instantiation av knappen du bruker til å starte varslingen * / button = (Button) findViewById (R.id.notification_button); / * * Trinn 2 * Opprett hensikten du skal starte når meldingen er trykket * og la PendingIntent håndtere det * / Intent open_activity_intent = new Intent (dette, ActivatedActivity.class); open_activity_intent.putExtra (NOTIFICATION_ID, notification_id); PendingIntent pending_intent = PendingIntent.getActivity (dette, 0, open_activity_intent, PendingIntent.FLAG_CANCEL_CURRENT); / * * Trinn 3 * Her lager du varslingen og begynner å legge til alle attributter du skal bruke * / notification_builder = ny NotificationCompat.Builder (dette) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string .notification_title)) .setContentText (getString (R.string.notification_text)) / * * Denne metoden angir at varslingen vår må ha alle standardkarakteristikkene for et varsel * som lyd og vibrasjon * / .setDefaults (Notification.DEFAULT_ALL) / * Denne metoden kommer til å avvise varselet når den er trykket * / .setAutoCancel (true) .setContentIntent (pending_intent); / * * Trinn 4 * Her installerer vi varslingsbehandler-objektet for å starte / stoppe varslene * / notification_manager = NotificationManagerCompat.from (dette);  @Override protected void onStart () super.onStart (); / * * Trinn 5 * Meldingen kommer til å vises når du trykker på knappen på skjermen * / button.setOnClickListener (new View.OnClickListener () @Override public void onClick (Vis v) notification_manager.notify (notification_id, notification_builder .bygge());  ); 

Trinn 1

Vi instanser først knappen som vi skal bruke for å starte varslingen. Du kan også opprette varselet direkte i onCreate metode,men ved å bruke en knapp har du mer kontroll over den nøyaktige tidspunktet for varselet.

Steg 2

I det andre trinnet ordner vi en Intent objekt med oppgaven som skal utføres når meldingen blir tappet. Vi sender objektet til a PendingIntent eksempel for å håndtere det senere når det kalles.

Trinn 3

Ved hjelp av Android Support Library lager vi varslet ved hjelp av Bygger klasse av NotificationCompat objekt og sett dets attributter.

Trinn 4

I dette trinnet ordner vi en NotificationManagerCompat eksempel å starte og / eller stoppe varslingen når som helst vi ønsker. Dette vil gjøre testing mye lettere.

Trinn 5

Når knappen er tappet, blir meldingen avbrutt ved hjelp av gi beskjed metode.

Ikke glem å bruke klassene fra Android Support Library. På denne måten kan du være sikker på at varselet ditt skal se bra ut på eldre versjoner av Android.

Du kan nå kjøre appen, trykke på knappen, og se varselet vises øverst på skjermen. Hvis du klikker på varselet, bør det ta deg til ActivatedActivity aktivitet. Når meldingen er satt opp og fungerer, er det på tide å begynne å legge til handlinger for det.

5. Legge til tiltak for meldingen

Du kan legge til ekstra handlinger i varselet ved å påkalle addAction metode på notification_builder gjenstand. For at dette skal fungere, må du passere en PendingIntent forekommer med oppgaven du liker å utføre.

I den følgende kodestykket viser jeg deg trinnene du må implementere for å opprette en handling med en tilpasset oppgave. I dette eksemplet kommer jeg til å ta deg til min Twitter-profil i Twitter-appen. Dette betyr at jeg trenger en URI eksempel peker på min Twitter profil, legg dette til i Intent, og la PendingIntent håndter det når handlingen er tappet. Sett inn denne kodeblokken før instantiation av notification_builder gjenstand.

 / * Handlingen i den håndholdte meldingen må utføre en viss oppgave * I dette tilfellet skal forfatterens twitterprofil åpnes, i twitter-appen, når den klikkes *, men du kan endre den med profilen din hvis du vil;) * / Intent open_twitter_profile = ny 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 (dette, 0, open_twitter_profile, 0);

For å legge til handlingen, påkalle addAction metode på notification_builder objekt og passere i open_twitter_profile objekt vi nettopp har opprettet.

/ * * Her lager du varslingen og begynner å legge til alle attributter * du skal bruke * / notification_builder = ny NotificationCompat.Builder (dette) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string.notification_title )) .setContentText (getString (R.string.notification_text)) / * * Denne metoden angir at varselet ditt må ha alle standardegenskapene til et varsel * som lyd og vibrasjon * / .setDefaults (Notification.DEFAULT_ALL) / * Denne metoden kommer til å avvise varselet når det er trykt * / .setAutoCancel (true) .setContentIntent (venter_intent) / * * Her kan du legge til handlinger på din håndholdte enhet * bare ta vare på mengden handlinger du legger til * i dette tilfellet, som i mange andre, mindre er mer * / .addAction (android.R.drawable.ic_dialog_info, getString (R.string.first_action), twitter_intent);

Kjør programmet, trykk på knappen for å utløse varselet, og du bør se varselet vises sammen med handlingen vi nettopp har opprettet.

Mens du kan legge til flere handlinger til et varsel ved hjelp av addAction metode, sørg for at brukeren ikke er overveldet av antall handlinger de kan velge mellom.

6. Støtter Android Wear

Så langt har vi brukt klassene fra Android Support Library for å sikre at varslingene også vises på smartwatches som kjører Android Wear. Du kan kjøre programmet på en fysisk smartwatch, eller du kan prøve den på emulatoren fra Android Virtual Device Manager. Uansett må du synkronisere enheten med smartwatch.

Før du synkroniserer enheten med smartwatch-emulatoren, må du installere Android Wear-appen, som er tilgjengelig på Google Play. Når du har koblet fra hver annen Android-enhet som er koblet til datamaskinen din, utfør følgende kommando fra kommandolinjen.

adb-enheter

Denne kommandoen viser enhetene som er koblet til utviklingsmaskinen din. Du bør se to av dem, smartwatch-emulatoren og enheten din. Kjør deretter kommandoen fra kommandolinjen for å aktivere port videresending.

adb -d fremover tcp: 5601 tcp: 5601

Du kan nå koble enheten din med emulatoren og slå på varslingene ved hjelp av Android Wear-appen. Kjør appen igjen og utløs meldingen. Meldingen skal se ut som den som vises nedenfor.

7. Legge til bare bærbare handlinger

Det er mulig å legge til handlinger som kun er synlige på wearables. Dette oppnås ved å påkalle addAction metode av WearableExtender klasse. Resultatet er at eventuelle handlinger lagt til via NotificationCompat.Builder Klassen ignoreres.

Som vi gjorde før, for å utløse handlingen, bruker vi en Intent og a PendingIntent eksempel, men vi oppretter handlingen som vises på den bærbare enheten ved hjelp av Bygger klasse av en spesiell Handling klasse, som er en del av NotificationCompat klassen som vist nedenfor.

/ * Her instanser vi Intent vi vil bruke når handlingen i smartwatch er trykket * / Intent wearable_intent = new Intent (dette, ActivatedActivity.class); PendingIntent wearable_pending_intent = PendingIntent.getActivity (dette, 0, wearable_intent, PendingIntent.FLAG_UPDATE_CURRENT); / * Nå har vi en hensikt om den bærbare opprettelsen, vi må lage en slitesterk handling ved å bruke den * / NotificationCompat.Action wearable_action = ny NotificationCompat.Action.Builder (android.R.drawable.ic_dialog_email, getString (R.string.wearable_action) , wearable_pending_intent) .build ();

Vi legger da til denne handlingen til notification_builder objekt ved hjelp av forlenge metode som vist nedenfor.

/ * * Her lager du varslingen og begynner å legge til alle attributter * du skal bruke * / notification_builder = ny NotificationCompat.Builder (dette) .setSmallIcon (R.drawable.ic_launcher) .setContentTitle (getString (R.string.notification_title )) .setContentText (getString (R.string.notification_text)) / * * Denne metoden angir at varselet ditt må ha alle standardegenskapene til et varsel * som lyd og vibrasjon * / .setDefaults (Notification.DEFAULT_ALL) / * Denne metoden kommer til å avvise varselet når det er trykt * / .setAutoCancel (true) .setContentIntent (venter_intent) / * * Her kan du legge til handlinger på din håndholdte enhet * bare ta vare på mengden handlinger du legger til * i dette tilfellet, Som i mange andre, er mindre mer * / .addAction (android.R.drawable.ic_dialog_info, getString (R.string.first_action), twitter_intent) / * * Her legger du til en wearable-only handling * Denne handlingen vil ikke være synlig i den håndholdte enheten * / .extend (ny WearableExtender ( ) .AddAction (wearable_action));

Kjør appen og trykk på knappen for å vise varselet på enheten din. Det bør være annerledes enn varselet som dukker opp på den bærbare emulatoren.

Konklusjon

Smartwatches er her for en stund, og det er derfor viktig å dra nytte av denne nye måten å kommunisere med programmets brukere. Jeg håper du har funnet opplæringen nyttig og ikke glem å dele den hvis du likte det.