Windows Phone 8 Succinctly: Flis, Påminnelser, og Multitasking
16
Del
Del
Share < .no> Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av
Dette innlegget er en del av en serie som heter Windows Phone 8 Succinctly.Windows Phone 8 Succinctly: Multimedia ApplicationsWindows Phone 8 Succinctly. Lokalisering, Windows Phone Store & In-App Purchases
I denne opplæringen, skal vi fokusere på live apps. Live-apps er en av de sentrale begreper i Windows Phone utvikling, og du skal skape en opplevelse av kvalitet, er mange faktorer involvert, som varsler, agenter og fliser.
The Multitasking Approach
Som vi har sett i søknaden livssyklus diskutert tidligere i denne serien, applikasjoner er suspendert når de ikke er i forgrunnen. Hver kjører prosessen er avsluttet, slik at søknaden kan ikke utføre operasjoner mens i bakgrunnen
Det er tre måter å overvinne denne begrensningen.
La oss se i detalj hvordan de fungerer.
Push Notifications
Push varsler er meldinger som sendes til telefonen som kan reagere på mange måter basert på varslingstype. Det finnes tre typer push-varslinger:
Rå varslinger kan lagre alle typer informasjon, men de kan mottas kun hvis det tilknyttede programmet er i forgrunnen
Toast meddelelser. de mest påtrengende seg, siden de viser en melding på toppen av skjermen, sammen med en lyd og vibrasjon. Tekstmeldinger er et godt eksempel på toast varsler
Tile varsler kan brukes til å oppdatere programmet Tile
Det er tre faktorer som er involvert i push varsling arkitektur..
Windows Phone-programmet, som fungerer som en klient for å motta varslinger.
serverprogrammet, som kan være en webapplikasjon eller en tjeneste, som tar seg av å sende meldinger. Vanligvis lagrer serveren en liste over alle enhetene som er registrert for å motta varslinger.
Hver Windows Phone program mottar push-varslinger ved hjelp av en kanal, som identifiseres av en unik URI. Serveren Programmet vil sende meldinger til de registrerte kunder ved å sende en XML-streng til denne URI ved hjelp av en POST-kommandoen. Den MPNS vil ta seg av ruting av forespørsler til de riktige komponentene.
Her er et eksempel på en URI som representerer en channel:
http://sn1.notify.live.net/throttledthirdparty/01.00/AAhsLicyiJgtTaidbJoSgm-
Note: MPNS bruk er gratis, men begrenset til 500 meldinger per dag per enkelt enhet. Hvis du trenger å overskride denne begrensningen, må du kjøpe en TLS digitalt sertifikat, som du trenger for å sende inn under sertifiseringsprosessen og for å signere serveren din søknad. På denne måten vil du også være i stand til å støtte SSL for å kryptere meldingen kanal
bilder
sende en meddelelse. Server
Som allerede nevnt, varslinger sendes ved hjelp av en HTTP-kanal med en POST-kommandoen. Fordelen er at det er avhengig av standard teknologi, så vil du være i stand til å lage et serverprogram med noen utviklingsplattform
HTTP-forespørsel som representerer en varsling har følgende funksjoner:.
Det er definert ved hjelp av XML, slik at innholdstype for anmodningen skal være text /xml.
En tilpasset header kalt X-WindowsPhone-Target, som inneholder varslingstype (toast, Tile, eller rå) .
En tilpasset header kalt X-NotificationClass, som er varslings prioritet (vi vil diskutere dette mer inngående senere).
La oss se hvordan de forskjellige push-varsling er . strukturert i detalj
Toast Påminnelser
Eksemplet nedenfor viser XML for å sende en toast melding:?
< xml version = "1.0" encoding = "utf -8 "> < wp: Varslings xmlns: wp =" WPNotification "> < wp: Toast > < wp: Text1 > Tittel < /wp: Text1 > < wp: Text2 > Tekst < /wp: Text2 > < wp:? Param > /MainPage.xaml ID = 1 < /wp: Param > < /wp: Toast > < /wp: Notification >
Det er tre parametere å sette:
wp: Text1 er varselet tittel
wp: Text2. er varselet tekst
wp. Param er valgfritt varsling deep link; når denne er satt, er programmet åpnes automatisk på den angitte siden med ett eller flere søkestrengparametere som kan brukes til å identifisere meldingen kontekst.
Når du forbereder forespørsel om å sende over HTTP, X-WindowsPhone-Target header bør settes til toast, mens X-NotificationClass header støtter følgende verdier:
2 for å sende meldingen umiddelbart
12 til å sende den. varsling etter 450 sekunder.
22 til å sende meldingen etter 900 sekunder.
Tile Påminnelser
Tile varsler blir brukt til å oppdatere enten hoved Tile eller en av de sekundære Fliser i programmet. Vi vil ikke beskrive XML for å sende meldingen her: Fliser er mer kompleks enn de andre varslingstyper siden Windows Phone 8 støtter mange maler og størrelser. Vi skal se på XML som beskriver Tile varslinger senere i Fliser delen av artikkelen.
For å sende en Tile varsling, X-WindowsPhone-Target header av HTTP-forespørsel bør settes til side ved side, mens X-NotificationClass header støtter følgende verdier:
1 for å sende meldingen umiddelbart
11 til å sende meldingen etter 450 sekunder
21 til å sende.. varselet etter 900 sekunder.
Rå Påminnelser
Rå varslinger ikke har en bestemt XML definisjon siden de kan levere alle typer data, slik at vi kan ta vår egen definisjon.
For å sende en rå varsling, X-WindowsPhone-Target header av HTTP-forespørsel bør settes til rå, mens X-NotificationClass header støtter følgende verdier:
3 å sende meldingen umiddelbart.
13 til å sende meldingen etter 450 sekunder.
23 til å sende meldingen etter 900 sekunder.
Sende Request og administrerende Response
viser følgende eksempelkode et eksempel på hvordan du sender en toast varsling bruker HttpWebRequest klassen, en av de grunnleggende .NET Framework klasser for å utføre nettverksoperasjoner:
string toastNotificationPayloadXml = "<? xml version = \\" 1,0 \\ "encoding = \\" utf-8 \\ ">?" + "≪ wp: Varslings xmlns: wp = \\" WPNotification \\ ">" + "≪ wp: Toast >" + "≪ wp: Text1 > title < /wp: Text1 >" + "≪ wp: Text2 > text < /wp: Text2 >" + "≪ /wp: Toast >" + "< /wp: Notification >"; byte [] nyttelast = Encoding.UTF8.GetBytes (toastNotificationPayloadXml); Var pushNotificationWebRequest = (HttpWebRequest)WebRequest.Create("http://sn1.notify.live.net/throttledthirdparty/01.00/AAEqbi-clyknR6iysF1QNBFpAgAAAAADAQAAAAQUZm52OkJCMjg1QTg1QkZDMkUxREQ");pushNotificationWebRequest.Method = "POST"; pushNotificationWebRequest.ContentType = "text /xml"; Var messageId = Guid.NewGuid (); pushNotificationWebRequest.Headers.Add ("X-MessageID", messageId.ToString ()); pushNotificationWebRequest.Headers.Add (" X-WindowsPhone-Target "," toast "); pushNotificationWebRequest.Headers.Add (" X-NotificationClass "," 2 "); pushNotificationWebRequest.ContentLength = payload.Length; bruker (var notificationRequestStream = pushNotificationWebRequest.GetRequestStream ()) {notificationRequestStream -write (nyttelast, 0, payload.Length);.} bruker (var pushNotificationWebResponse = (HttpWebResponse) pushNotificationWebRequest.GetResponse ()) {//Sjekk status på responsen}
XML definisjon er rett og slett lagret i en streng . Vi kommer til å endre bare nodeverdiene som lagrer meldingen tittel og tekst. Deretter begynner vi å forberede HTTP-forespørsel ved hjelp av HttpWebRequest klassen. Vi legger til egendefinerte overskrifter, definere innholdet lengde og type (tekst /xml), og angi metode å bruke (POST).
Til slutt, ved hjelp av GetRequestStream () -metoden, vi får strømmen Plasseringen å skrive anmodningen innhold, som er varslings XML. Da sender vi det ved å ringe GetResponse () -metoden, som returnerer status på forespørsel. Ved å analysere responsen er vi i stand til å fortelle hvorvidt operasjonen var vellykket.
Responsen analyse innebærer statuskode og tre egendefinerte overskrifter:
Responsen status code returnerer generisk informasjon som forteller deg om anmodningen er mottatt. Det er basert på standard HTTP statuskoder. For eksempel 200 OK betyr at anmodningen har blitt mottatt, mens 404 Not Found betyr at URI var ugyldig.
The X-DeviceConnectionStatus header returnerer enheten status når forespørselen er sendt.. Connected, Inaktiv, Disconnected, eller TempDisconnected
De X-SubscriptionStatus header avkastning hvis kanalen er fortsatt gyldig (Active) eller ikke (Utløpt). I det andre tilfellet, bør vi ikke prøve å sende den på nytt, siden det ikke eksisterer lenger.
Kombinasjonen av disse parametrene vil hjelpe deg å forstå den virkelige statusen for operasjonen. MSDN dokumentasjon har beskrivelser av alle mulige kombinasjoner.
Det er viktig å riktig administrere varslene fordi MPNS medfører ikke det noen automatisk retry mekanisme. Hvis en melding ikke er levert, vil MPSN ikke prøve igjen å sende den, selv om operasjonen mislyktes for en midlertidig grunn (for eksempel, ble enheten ikke er koblet til Internett). Det er opp til deg å implementere et nytt forsøk mekanisme basert på responsen
PushSharp. En Push Notification Helper Library
Som du kan se, sende push-varslinger er litt vanskelig siden det krever at du manuelt sett overskrifter, XML strenger, etc. Noen utviklere har jobbet på pakkere som skjuler kompleksiteten manuelt definere varsling ved å utsette på høyt nivå APIer, slik at du kan arbeide med klasser og objekter.
En av de mest interessante pakkere kalles PushSharp, noe som kan være ganske enkelt installeres på din server prosjekt ved hjelp nuget. De største fordelene med dette biblioteket er:
Det er en generisk NET bibliotek som ikke bare støtter Windows Phone, men de mest vanlige plattformer som bruker push-varsling, som Windows Store apps, iOS, Android, og Bjørnebær. Hvis du har en kryssplattform program, vil det gjøre livet lettere i å håndtere en single-server program som er i stand til å sende meldinger til ulike typer enheter.
Eksemplet nedenfor viser hvor enkelt det er å sende en toast varsling ved hjelp av dette biblioteket.
WindowsPhoneToastNotification varsling = new WindowsPhoneToastNotification (); notification.Text1 = "Tittel"; notification.Text2 = "Text"; notification.EndPointUrl = "http://sn1.notify.live.net/throttledthirdparty/01.00/AQHcej5duTcJRqnn779soTA1AgAAAAADAQAAAAQUZm52OkJCMjg1QTg1QkZDMkUxREQFBkxFR0FDWQ";notification.NotificationClass=BatchingInterval.Immediate;PushBroker megler = new PushBroker (); broker.RegisterWindowsPhoneService (); broker.QueueNotification (varsling);
Hver varslingstype er representert ved en bestemt klasse, som utsetter en eiendom for hver varslingsfunksjonen. I forrige prøven, den WindowsPhoneToastNotification klassen har egenskaper til å sette varsling tittel, tekst og dyp link.
Kanalen URI stedet for å sende meldingen ligger i EndPointUrl eiendom. Når alt er satt, kan du sende det ved å opprette en PushBroker objekt, som representerer den sentralen som tar seg av å sende meldinger. Først må du registrere deg for den type varslinger du vil sende. Siden vi jobber med Windows Phone, bruker vi RegisterWindowsPhoneService () -metoden. Deretter kan vi kø varslingen ved ganske enkelt den sendes til den QueueNotification () -metoden. Det blir automatisk sendt med prioriteten du har satt.
Tilnærmingen er den samme hvis du vil sende en Tile. Du har tre ulike klasser basert på Tile mal, WindowsPhoneCycleTileNotification, WindowsPhoneFlipTileNotification, og WindowsPhoneIconicTileNotification; eller WindowsPhoneRawNotification for en rå varsling.
Til slutt, den PushBroker klassen utsetter mange arrangementer for å kontrollere varsling livssyklus, som OnNotificationSent som utløses når en melding er sendt, eller OnNotificationFailed som utløses når du sender operasjonen mislyktes
Motta Push Notifications. Kunden
Basen klassen som identifiserer en push varslingskanal kalles HttpNotificationChannel og utsetter mange metoder og hendelser som utløses når noe er koblet til kanalen skjer
Merk:.. For å motta push-varslinger må du aktivere ID_CAP_PUSH_NOTIFICATION evne i manifestfilen
Hvert program har et enkelt unik kanal, identifisert av et nøkkelord. Av denne grunn bør det opprettes bare første gang programmet abonnerer å motta varslinger; hvis du prøver å lage en kanal som allerede eksisterer, vil du få et unntak. For å unngå dette scenariet HttpNotificationChannel klasse, tilbyr Finn () -metoden, som returnerer en referanse til kanalen.
Private void OnRegisterChannelClicked (objekt avsenderen, RoutedEventArgs e) {HttpNotificationChannel kanal = HttpNotificationChannel.Find ("TestChannel" ); if (kanal == null) {kanal = new HttpNotificationChannel ("TestChannel"); channel.Open (); }}
I den forrige prøven er kanalen opprettet bare hvis Find () metoden mislykkes, og returnerer en null objekt. Den HttpNotificationChannel klasse utsetter mange metoder for å begynne å kommunisere med push-varslinger; de bør kalles bare dersom kanalen ikke allerede eksisterer. I utvalget ser vi Open () metode som bør kalles for å effektivt lage kanalen, og som automatisk abonnerer på rå varslinger.
Hvis vi ønsker å være i stand til å motta toast og Tile varslinger, må vi bruke to andre metoder som tilbys av klassen: BindToShellToast () og BindToShellTile (). Eksemplet nedenfor viser en fullstendig initialisering:
private void OnRegisterChannelClicked (objekt avsenderen, RoutedEventArgs e) {HttpNotificationChannel kanal = HttpNotificationChannel.Find ("TestChannel"); if (kanal == null) {kanal = new HttpNotificationChannel ("TestChannel"); channel.Open (); channel.BindToShellToast (); channel.BindToShellTile (); }}
Utover tilbyr metoder, HttpNotificationChannel klassen tilbyr også noen hendelser for å håndtere ulike forhold som kan utløses under kanalen livssyklus.
Det viktigste heter ChannelUriUpdated, som utløses når kanalen opprettelse operasjonen er fullført og MPNS har returnert URI som identifiserer den. Dette er tilfelle i som i en vanlig søknad, vil vi sende URI til serveren applikasjonen slik at den kan lagre den til senere bruk. Det er viktig å abonnere på denne hendelsen om kanalen har nettopp blitt opprettet, eller eksisterer allerede og har blitt hentet bruker Finn () -metoden. Fra tid til annen, den URI som identifiserer den kanal kan utløpe. I dette tilfellet er ChannelUriUpdated hendelsen utløste igjen for å returnere den nye URI
Eksemplet nedenfor viser en full klient initialisering.
Private void OnRegisterChannelClicked (objekt avsenderen, RoutedEventArgs e) {HttpNotificationChannel kanal = HttpNotificationChannel.Find ("TestChannel"); if (kanal == null) {kanal = new HttpNotificationChannel ("TestChannel"); channel.Open (); channel.BindToShellToast (); channel.BindToShellTile (); } Channel.ChannelUriUpdated + = channel_ChannelUriUpdated;} void channel_ChannelUriUpdated (objekt avsenderen, NotificationChannelUriEventArgs e) {MessageBox.Show (e.ChannelUri);}
Som du kan se, returnerer ChannelUriUpdated arrangementet en parameter med ChannelUri eiendommen, som inneholder den informasjonen vi trenger. I forrige prøven, vi bare vise URI kanal til brukeren
Det er to andre hendelser som tilbys av HttpNotificationChannel klasse som kan være nyttig.
ShellToastNotificationReceived utløses når programmet mottar en toast varsling når den er åpen. Som standard er toast varslinger vises ikke hvis det tilknyttede programmet er i forgrunnen.
HttpNotificationReceived arrangementet mottar, i parametrene, objektet som identifiserer meldingen. Innholdet lagres i kroppen eiendommen, som er en strøm siden rå varslinger kan lagre alle typer data. I følgende eksempel, antar vi at den rå varselet inneholder tekst og vise den når den er mottatt:
void Channel_HttpNotificationReceived (objekt avsenderen, HttpNotificationEventArgs e) {bruker (StreamReader leser = new StreamReader (e.Notification.Body) ) {string melding = reader.ReadToEnd (); Dispatcher.BeginInvoke (() = > MessageBox.Show (melding)); }}
ShellNotificationReceived hendelsen, i stedet, returnerer i parametrene en samling objekt, som inneholder alle XML-noder som er en del av meldingen. Eksemplet nedenfor viser deg hvordan du kan hente tittelen og beskrivelsen av varsling, og hvordan du kan vise dem til brukeren:
void Channel_ShellToastNotificationReceived (objekt avsenderen, NotificationEventArgs e) {string title = e.Collection [" wp: Text1 "]; streng beskjed = e.Collection ["wp: Text2"]; Dispatcher.BeginInvoke (() = > MessageBox.Show (tittel + "" + melding));}
Behandle feil
Hvis noe går galt når du åpner en varslingskanal, kan du abonnere på ErrorOccurred begivenhet HttpNotificationChannel klassen å finne ut hva som har skjedd.
Arrangementet returnerer en parameter som inneholder informasjon om feilen, som ErrorType, errorcode, ErrorAdditionalData, og Message.
Følgende liste inneholder de fleste vanlige forhold som kan føre til en svikt under kanalåpningen:
For å bevare batterilevetid og ytelse, begrenser Windows Phone maksimalt antall kanaler som er holdt i live samtidig. Hvis grensen er nådd, og du prøver å åpne en ny kanal, vil du få verdien ChannelOpenFailed som ErrorType
fått melding kan inneholde en melding som er dårlig formatert.; i dette tilfellet ErrorType vil være MessageBadContent
Du kan sende for mange meldinger på samme tid.; . i dette tilfellet, blir de avvist med NotificationRateTooHigh feil
For å bevare batteristrøm, kan meldinger mottas kun hvis batteriet er ikke kritisk; i dette tilfellet, vil du få en PowerLevelChanged feil.
ErrorAdditionalData eiendommen kan inneholde mer informasjon om feilen. For eksempel, hvis du får en PowerLevelChanged feil, vil du bli informert om gjeldende batterinivå (lav, kritisk, eller normal).
Void channel_ErrorOccurred (objekt avsenderen, NotificationChannelErrorEventArgs e) {if (e.ErrorType == ChannelErrorType.PowerLevelChanged) {ChannelPowerLevel nivå = (ChannelPowerLevel) e.ErrorAdditionalData; bryteren (nivå) {case ChannelPowerLevel.LowPowerLevel: MessageBox.Show («Batterinivået er lavt"); gå i stykker; case ChannelPowerLevel.CriticalLowPowerLevel: MessageBox.Show ("Battery er kritisk"); gå i stykker; }}}
Bakgrunns Agents
Push varsler er den beste måten å samhandle med brukeren når programmet ikke kjører siden de tilbyr den beste opplevelsen, og på samme tid, bevare batteriets levetid. Imidlertid er erfaringen begrenset til meldinger, du kan ikke utføre andre operasjoner, som henter data fra en web-tjeneste eller lese en fil fra lokal lagring. Videre, for visse scenarier der du ikke trenger øyeblikkelige meldinger, og skaper den nødvendige serverinfrastruktur kan bli for dyrt. Tenk for eksempel på et vær program. Det er ikke avgjørende at prognosen oppdateres umiddelbart når prognosene endring
For alle disse scenariene, har Windows Phone 7.5 introduserte bakgrunns agenter, som er spesielle tjenester periodisk utført av Windows Phone, selv når programmet ikke kjører. Det finnes to typer periodiske bakgrunnsmidler: periodisk og lyd. I det nye prosjektet i Visual Studio, vil du finne mange maler for alle de støttede agenten typer. I denne delen vil vi se hvordan periodisk agenter arbeid i detalj
. Tips: Selv om en bakgrunn middel er et eget Visual Studio-prosjektet, den deler de samme ressursene med forgrunnen programmet. For eksempel, de deler samme lokal lagring, slik at du er i stand til å lese data som er opprettet av programmet i agent, og vice versa.
Agent Limits
Det er noen begrensninger som bakgrunns agenter må tilfredsstille. Det viktigste er koblet til tids, ettersom midler kan drives bare i en bestemt tidsramme for en begrenset tidsperiode. Vi vil diskutere denne begrensningen senere siden det er noen forskjeller i henhold til bakgrunnen agenten type du skal bruke
De første begrensning bekymringer støttet APIer Bilde:. Bare et begrenset antall av APIer kan benyttes i en bakgrunn middel. I utgangspunktet er alle APIer som er knyttet til brukergrensesnittet forbudt siden midler ikke kan samhandle med programmet grensesnitt. Du kan finne en komplett liste over støttede APIer i dokumentasjonen MSDN Den andre begrensningen er om minne Bilde: a. Bakgrunnen agent kan ikke bruke mer enn 11 MB minne, ellers vil det bli avsluttet. Det er viktig å understreke at i løpet av testprosessen (når Visual Studio debugger er tilkoblet), vil minnegrensen deaktiveres, og bakgrunnen agent vil ikke bli avsluttet hvis den har brukt mer enn 11 MB. Du må teste den i et reelt miljø hvis du vil være sikker på at grensen er ikke nådd Den tredje og siste begrensningen er om timing Bilde: a. Bakgrunn middel er automatisk deaktivert 14 dager etter at den er initialisert av den tilkoblede søknaden. Det er to måter å overvinne denne begrensningen: Det er viktig å huske på at dersom utførelsen bakgrunnen agenten fortløpende mislykkes to ganger (fordi det overskredet grensen minne eller hevet en uovervåkede unntak), er det automatisk deaktivert; søknaden blir nødt til å aktivere den når den er lansert. Periodiske midler brukes når du trenger å utføre små operasjoner ofte. De er vanligvis henrettet hvert 30. minutt Periodiske agenter er identifisert av PeriodicTask klassen, som tilhører Microsoft.Phone.Scheduler navnerom. ressurskrevende agenter har blitt opprettet for motsatt scenario: langvarige oppgaver som utføres av og til. De kan kjøre i opptil 10 minutter, men bare hvis telefonen er koblet til et Wi-Fi-nettverk og en ekstern strømkilde. Disse midlene er perfekt for oppgaver som datasynkronisering. Faktisk er de vanligvis utføres i løpet av natten, når telefonen lades. Andre enn de tidligere forhold, faktisk, at telefonen ikke skal være i bruk. Låseskjermen bør ressurskrevende agenter er identifisert av ResourceIntensiveTask, som også er en del av Microsoft.Phone.Scheduler navne aktivert og ingen andre operasjoner (som telefonsamtaler) skal utføre.. Anmeldelser Som allerede nevnt, bakgrunnsmidler er definert i et prosjekt atskilt fra front-end programmet. Periodiske agenter har samme mal og arkitektur, og Windows Phone søknaden vil velge å registrere dem som PeriodicTask eller ResourceIntensiveTask stedene. For å lage en bakgrunn agent, må du legge til et nytt prosjekt til løsningen som inneholder Windows Phone-programmet. I Legg til ny Project-vinduet finner du en mal som heter Windows Phone Scheduled Task Agent i Windows Phone delen Prosjektet inneholder allerede klassen som skal forvalte agent.; det heter ScheduledAgent og det arver fra ScheduledTaskAgent klassen. Klassen allerede implementerer en metode og en hendelseshåndterer. Metoden, som kalles OnInvoke (), er den viktigste. Det er den metoden som utløses når bakgrunnen agenten kjøres, slik at den inneholder logikken som utfører operasjonene vi trenger. Eksemplet nedenfor viser hvordan du sender en toast melding fra en bakgrunn agent: Det er viktig å markere NotifyComplete () metode som bør kalles så snart agent har fullført alle operasjoner. Det varsler operativsystemet at oppgaven har fullført jobben sin, og at den neste planlagte oppgaven kan utføres. Den NotifyComplete () metoden bestemmer oppgaven status. Hvis det ikke heter innenfor de tildelte tids 25 sekunder for periodiske oppgaver eller 10 minutter for ressurskrevende oppgaver-utførelsen blir avbrutt Det er en annen måte å full agentens henrettelsen. Abort (). Denne metoden kalles når noe går galt (for eksempel de nødvendige forutsetninger for å utføre agenten ikke er fornøyd), og brukeren må åpne programmet for å fikse problemet. hendelseshåndterer kalles UnhandledException og er utløses når en uventet unntak er hevet. Du kan bruke det, for eksempel for å logge feilen. Den forrige prøven viser deg hvordan du kan sende lokale toast varslinger. En skål varsling er identifisert av ShellToast klassen. Du bare må sette alle støttede egenskaper (tittel, innhold og eventuelt NavigationUri, som er dypt link). Til slutt, må du ringe Show () -metoden for å vise det. Som ekstern varsling, er lokale toasts støttes bare hvis programmet er i bakgrunnen. Den forrige koden fungerer bare inne en bakgrunn agent. Hvis det er utført av en forgrunnen programmet, skjer det ingenting. Bakgrunnen middel er definert i et eget prosjekt, men er registrert i søknaden. Registreringen bør gjøres når programmet starter, eller i sideinnstillingene hvis vi gir brukerne muligheten til å aktivere eller deaktivere det i programmet. Basen klassen skal bruke når du arbeider med bakgrunns agenter er ScheduledActionService, som representerer telefonens planleggeren. Det tar seg av registrering av alle bakgrunns agenter og opprettholde dem i løpet av sin livssyklus. Det første trinnet er å definere hvilken type middel du vil bruke. Som tidligere nevnt, er bakgrunnen midlet arkitekturen alltid den samme; typen (periodisk eller ressurskrevende) er definert av programmet. I det første tilfellet må du opprette en PeriodicTask objekt, og i det andre tilfellet, en ressurstunge oppgaven objekt. Uavhengig av type, er det viktig å sette Beskrivelse eiendommen, som er teksten som vises til brukere i Innstillinger-siden. Det er brukt for å forklare hensikten med agenten slik at brukerne kan bestemme om du vil beholde det aktivert I begge tilfeller, bakgrunns agenter er identifisert ved navn, som er vedtatt som en parameter av klassen. Dette navnet bør være unikt på tvers av alle de oppgavene som er registrert ved hjelp av PhoneApplicationService klasse; ellers vil du få et unntak Den grunnleggende operasjon for å legge til en oppgave er veldig enkelt. Den første operasjonen sjekker om agenten er allerede planlagt av bruker Finn () metoden i ScheduledActionService klassen, noe som krever oppgaven unike navn. Denne operasjonen er nødvendig hvis vi ønsker å utvide agentens levetid. Hvis agenten ikke finnes ennå eller ikke planlagt (den IsScheduled eiendommen er falsk), må vi først fjerne den fra planleggeren og deretter legge det siden ScheduledActionService klassen tilbyr ikke en metode å bare oppdatere en registrert oppgave. Tillegget operasjonen er gjort ved hjelp av Legg til () metoden, som godtar enten en PeriodicTask eller en ResourceIntensiveTask objekt. Nå oppgaven er planlagt og vil bli utført når de aktuelle vilkår er oppfylt. Hvis du er i testfasen, finner du den LaunchForTest () metoden nyttig; det tvinger henrettelsen av en agent etter et fastsatt tidsrom. gå i stykker; gå i stykker; gå i stykker; gå i stykker;
Brukeren holder bruker programmet; agenten kan fornyes for ytterligere 14 dager hver gang programmet åpnes
Agenten brukes til å sende meldinger for å oppdatere hoved programmets Tile eller låseskjermen.; hver gang agenten sender et varsel vil det automatisk bli fornyet for ytterligere 14 dager.
Periodiske Agents
(kan henrettelsen intervallet ganger forkortes hvert 10. minutt for å falle sammen med andre bakgrunnsprosesser for å spare batterilevetid), og de kan kjøre for opptil 25 sekunder
. Brukerne er i stand til å håndtere periodiske agenter fra Innstillinger-panelet og deaktivere de som de ikke trenger. Periodiske agenter blir automatisk deaktivert hvis telefonen kjører i sparemodus; de vil automatisk bli gjenopprettet når tilstrekkelig batteristrøm er tilgjengelig.
ressurskrevende Agents
Opprette et bakgrunns Agent
beskyttet ride void OnInvoke (ScheduledTask oppgave) {ShellToast toast = new ShellToast (); toast.Title = "Tittel"; toast.Content = "Text"; toast.Show (); NotifyComplete ();}
Registrere Agent
PeriodicTask periodicTask = new PeriodicTask ("PeriodicTask."); PeriodicTask.Description = "Dette er en periodisk oppgave"; ResourceIntensiveTask resourceIntensiveTask = new ResourceIntensiveTask ("ResourceIntensiveTask"); resourceIntensiveTask.Description = "Dette er en ressurskrevende oppgave";
public void ScheduleAgent () {ScheduledAction action = ScheduledActionService.Find ("Agent"); if (handling == null || action.IsScheduled!) {if (action = null) {ScheduledActionService.Remove ("Agent"); } PeriodicTask oppgave = new PeriodicTask ("Agent"); task.Description = "Dette er en periodisk agent"; ScheduledActionService.Add (oppgave); #if DEBUG ScheduledActionService.LaunchForTest ("agent", TimeSpan.FromSeconds (10)); #endif}}