300 likes | 444 Views
Android-Programmering. Våren 2014. Oversikt – PendingIntents. Rollen til PendingIntents Vanlig bruk Deling Sending. Rollen til PendingIntents. Gjør sirkelen komplett Intenter gjør det mulig og benytte komponenter fra andre programmer
E N D
Android-Programmering Våren 2014
Oversikt – PendingIntents • Rollen til PendingIntents • Vanlig bruk • Deling • Sending
Rollen til PendingIntents • Gjør sirkelen komplett • Intenter gjør det mulig og benytte komponenter fra andre programmer • Trenger en sikker måte og deligereactions til disse • PendingIntents • Innkapsler en intent, og en action for å utføre den
Vanlig bruk • Krever 3 enkle steg • Lage en Intent • getXXX for og pakke inn Intent i en PendingIntent • (Egne metoder for hver av standardkomponentene) • Sende PendingIntenten til ønsket komponent • Notifications, widgets, servicer, activities
Innholdet i en PendingIntent • PendingIntent innkapsler alt for komponenten som oppretter den • Intent • Assosiert action • Identitet og rettigheter til komponenten som opprettet den • Komponentens package
Synlighet • Innholdet i en PendingIntent er ikke synlig for andre applikasjoner • Deles ikke utenfor komponenten som laget den • Lagres i Android systemet • PendingIntent objektet inneholder bare en token til innholdet
Deling • PendingIntent, som en referanse, tillater deling • Like PendingIntents får samme referanse • Begge må komme fra samme applikasjon • Blir sett på som like ved hjelp av Intent.filterEquals
Flags • Flags i getXXX sier hva som skal skje med valg av referanse • Kan gjøre noen endringer til en eksisterende Intent • Kan lage nye referanser selv om de matcher en tidligere • Kan gjøre tidligere PendingIntents ugyldige
Flags • FLAG_UPDATE_CURRENT • Hvis eksisterer, oppdater med extras fra den nye Intenten • FLAG_NO_CREATE • Ikke lag en ny • Returner en eksisterende, eller returner null • FLAG_CANCEL_CURRENT • Lag en ny • Hvis den matcher en eksisterende, kanseller denne • FLAG_ONE_SHOT • Kan bare sende en gang • Kan ha flere referanser • Hvis den matcher en eksisterende som ikke har flagget, lag en ny • Begge er gyldige
Sende PendingIntent • Utføre oppgaven i en PendingIntent • Kalle send metoden, sender Intenten den inneholder • Finnes flere overload metoder • Kan gjøre noen modifiseringer av Intenten som sendes • Sette verdier som ikke er satt tidligere • Gjør modifiseringene med Intent.fillIn
Oppsumering • Pakker inn en Intent og en assosiert action • Kjøres under identen til komponenten som oppretter • Innholdet i er ikke tilgjengelig fra applikasjoner • Flere referanser kan peke til samme PendingIntent • Bruk send metoden til å utføre PendingIntentactionen
Oversikt • Bakoverkompatiblenotifications • Notifications med actions • Mer personlige notifications • Flere notifications • Expandablenotifications
Lage en notification • Bruker builderpattern • Finnes to versjoner • Notification.Builder del av standard API’et • NotificationCompat.Builder del av v4 support library • Foretrekker NotificationCompat.Builder • Nedgraderer funksjonalitet etter behov • Krever inkludering av v4 support library
Vanlige Notification Properties • Støtter 4 properties i alle Android versjonene • 3 elementer i UI’et • Small icon: Builder.setSmallIcon • Title: Builder.setContentTitle • Text: Builder.setContentText • Kan assosiere klikk action på en notification • Valgfritt på Android 3.0 (API 11) og nyere • Kreves på tidligere versjoner
Legge til notification action • Brukere forventer at noe skjer når de trykker på en notification • Bruk setContentIntent • Action kan være hva som helst en Intent kan representere • Åpner vanligvis en Activity • Bruker en spesiell klasse kaldt PendingIntent • Pakker en Intent i en fremtidig action • Bruk PendingIntent.getActivity for å pakke inn en Activity Intent i en PendingIntent
NotificationManager • NotificationManager gir tilgang til notification systemet • Er en systemservice • Bruk Context.getSystemService med Context.NOTIFICATION_SERVICE • Usenotify metoden for å vise notificationen • Må gi en instans av Notification klassen • En int verdi definert av applikasjonen • Kan også inkludere en tag • Kan oppdatere en notification ved å bruke samme id/tag • Fjern notification med cancel
Mer kontroll • Android 3.0 (API 11) gir mer kontroll over notifications • Gir mulighet til å påvirke oppførselen til notificationene i listen • Kan gjøre dem mer informative • Hvis NotificationCompat.Builder blir disse ekstra funksjonene ignorert hvis de ikke er støttet
Oppførsel i listen • Kontroller fjerning • Kontroller om den automatisk skal fjernes • Builder.setAutoCancel • Bør stort sett være true • Hindre brukere i å fjerne den • Builder.setOngoing • Sett bare hvis nødvendig • Kontrollere posisjon • Builder.setPriority • Vær forsiktig
Mer informative • Kan gjøres mer informative • Kan ha et større ikon i tillegg • Builder.setLargeIcon • Kan plassere en teller i notificationen • Builder.setNumber • Kan vise en spesiell melding når den først vises • Builder.setTicker
Expandable Notifications • Android 4.1 (API 16) introduserte expandablenotifications • Har et standard view og kan utvides til å vise mer info • Benytter style klasser inne i NotificationCompat klassen • Bruker Builder.setStyle til å assosiere med builder instansen • BigTextStyle klassen gir et større tekstfelt • BigPictureStyle klassen kan vise et bilde opp til 240dp høyt • InboxStyle klassen kan vise tekslinjer
Oppsummering • Foretrekker NotificationCompat.Builder fremfor Notification.Builder • Small icon, Title, Text og action fungerer på alle versjoner • Bruker PendingIntents til å representere actions • Må ha action i versjoner < API Level 11 • API Level 11 gir mer kontroll • Kan kontrollere fjerning • Kan gjøre de mer personlig • API level 16 gir expandablenotifications • Kan inkludere mer informasjon • Kan utvide og minimere notificationen
Oversikt • Notifications og activity navigering • Foreground servicer • Notification actions • Notifications – eget layout
Notifications og activity navigering • Kan «ødelegge» navigering • Brukere har ofte en forventning av hvor back knappen fører • Ofte er en Activity dypt i hierarkiet • Notifications lager ikke en back historie
Gjøre det konsist • Legge ved back stack informasjon til notificationen • Applikasjonen med activityen som kalles på ha activity hierarkiet i manifest • Må lagre activity hierarkiet i TaskStackBuilderinstanse • Lage PendingIntent med TaskStackBuilder
Notification og servicer • Kan gi brukergrensesnitt til servicer • Åpner ofte aktiviteten som kontrollerer servicen • Notificationen kan fungere som et enkelt brukergrensesnitt • Servicer som bruker dette er ofte foreground servicer
Foreground Servicer • Elevert service prioritet • Prioritet nesten på linje med applikasjonen brukeren interagerer med • Har en fast notification når den kjører • Ingen spesielle krav til notificationen • Blir en foreground service ved å kalle startForeground • Sender inn notification id og Notification instans • Forblir i forgrunnen til den avslutter eller stopForeground blir kallt • Servicer kan gå inn og ut av foreground staten
Notification Actions • Actions gir knapper direkte i notificationen • Støtter Android 3.0 (API level 11) og høyere • Kan ha opp til 3 actions i en notification • Har et ikon og en tekst • Hver knapp bruker en egen PendingIntent • Dette er i tillegg til den «vanlige» • Unngå og bruke i applikasjoner som er satt til mindre enn API level 11 • Knappene vises kun som et hvitt felt
Eget layout • Kan bruke en egen layout • Kan bruke de view hierarkier som får plass • Tvers av prosesser • Notification kjører på OS host process • View hierarki er i applikasjonens prosess • RemoteView gir mulighet til å sende view hierarkier på tvers av prosesser • Bruk NotificationCompat.Builder.setContent
Oppsumering • Lag en konsistent oppførsel til back knappen • Bruk TaskStackBuilder for å lage back stacken • Krever at activityen som kjøres har en parent i manifestet • Notifications kan benyttes som et UI for servicer • Spesielt nyttig til foreground servicer • Notification actions lager knapper direkte i notificationen • Knytter ytterligere PendingIntent instanser til notificationen • RemoteView benyttes for egne notification layout