300 likes | 392 Views
ALKALMAZÁS ÉLETCIKLUS. életciklus - alap. Elindít Főképernyőről vagy programlistából Kilép Back gombbal. ALKALMAZÁS ÉLETCIKLUS. életciklus - alap. private void Application_Launching ( object sender, LaunchingEventArgs e) { // Alkalmazás " frissen " indul }
E N D
ALKALMAZÁS ÉLETCIKLUS életciklus - alap Elindít Főképernyőről vagy programlistából Kilép Back gombbal
ALKALMAZÁS ÉLETCIKLUS életciklus - alap privatevoidApplication_Launching(object sender, LaunchingEventArgs e) { // Alkalmazás "frissen" indul } privatevoidApplication_Closing(object sender, ClosingEventArgs e) { // Alkalmazásteljesenleáll }
ALKALMAZÁS ÉLETCIKLUS életciklus - eltakarva Eltakar Telefonhívás Emlékeztető Rendszer értesítése (pl alacsony akku szint) Képernyőzár* Újból látszik Ha az eltakaró elemet „elutasítjuk”
ALKALMAZÁS ÉLETCIKLUS életciklus - eltakarva // Futhat e az alkalmazás a képernyőzár alatt varappIdleDetection = PhoneApplicationService.Current.ApplicationIdleDetectionMode; // Elaludhat e a telefon, ha bizonyosideignemnyúlhozzá a felhasználó varuserIdleDetection = PhoneApplicationService.Current.UserIdleDetectionMode; (App.Current.RootVisualasPhoneApplicationFrame).Obscured += (s, e) => { // el van takarva varisLocked = e.IsLocked; }; (App.Current.RootVisualasPhoneApplicationFrame).Unobscured += (s, e) => { // újbóllátszódik };
ALKALMAZÁS ÉLETCIKLUS életciklus - alkalmazás váltás Deaktivál Windows gomb megnyomása Értesítésre klikkelés Az eredeti alkalmazás navigál egy másik (beépített) programra Képernyőzár* Reaktivál Az alkalmazásunkba a Back gomb által térünk vissza (visszalépés vagy alkalmazásváltás)
ALKALMAZÁS ÉLETCIKLUS passzív multitask Deaktiválás Alkalmazás állapotának mentése Memóriába Háttértárra (Isolated Storage)
ALKALMAZÁS ÉLETCIKLUS passzív multitask // Deaktiváláseseményalkalmazásszinten privatevoidApplication_Deactivated(object sender, DeactivatedEventArgs e) { // Mentés State Dictionary-beésIsolatedStorage-ba(Fájlok, Beállítások, Adatbázis) } // "Deaktiválás" eseményoldalszinten protectedoverridevoidOnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e) { // Mentés State Dictionary-beésIsolatedStorage-ba(Fájlok, Beállítások, Adatbázis) base.OnNavigatingFrom(e); }
ALKALMAZÁS ÉLETCIKLUS passzív multitask Reaktiválás Alvó állapotból (Dormant) Alkalmazásunk teljes mértékben meg lett őrizve a memóriában Nincs tennivaló Kiássuk a sírból (Tombstoned) Alkalmazásunknak csak egy kijelölt része lett megőrizve a memóriában State objektum segítségével kell visszaállítani az állapotot
ALKALMAZÁS ÉLETCIKLUS passzív multitask Reaktiválás Teljes emlékezetvesztésből Alkalmazásunk állapotát a rendszer nem őrizte meg Még mindig visszaállítható az állapot, amennyiben deaktiváláskor a háttértárra is mentettünk Ugyan lassabb, de még a telefon kikapcsolása esetén is megmaradnak beállításaink
ALKALMAZÁS ÉLETCIKLUS passzív multitask // Aktiváláseseményalkalmazásszinten privatevoidApplication_Activated(objectsender, ActivatedEventArgse) { bool isAppInstancePreserved= e.IsApplicationInstancePreserved; } // "Aktiválás" eseményoldalszinten protectedoverridevoidOnNavigatedTo(System.Windows.Navigation.NavigationEventArgse) { base.OnNavigatedTo(e); varstartupMode = PhoneApplicationService.Current.StartupMode; // Activate / Launch }
ALKALMAZÁSÉLETCIKLUS aktív multitask Alszik Multitask Háttér ügynökök Push értesítések
MULTITASK háttér ügynökök – általános Periódikus Mikor fut? 30 percenként Limitált erőforrások 5% CPU, 6MB RAM Meddig fut? 25 másodpercig Erőforrás-igényes Mikor fut? Ha a telefon töltőn van ÉS Ha nem mobilnetet használ ÉS Ha nem áll minimumon az akku ÉS Ha nincs aktív hívás ÉS Ha a telefon képernyője le van zárva Meddig fut? 10 percig
MULTITASK háttér ügynökök – fájlátvitel
MULTITASK háttér ügynökök – audió Mindenhonnan képes lejátszani... Helyi tartalom Internetes tartalom Internetes streamelt tartalom ...még HTML5-ből is A böngészőből indított audió anyagot ez játsza le automatikusan Használhatjuk az OS vezérlőit Hangerő Lejátszás / Megállítás Előre / Hátra léptetés
MULTITASK értesítések – értesítősáv A leghatékonyabb módja az értesítésnek Csináljon a felhasználó bármit is a telefonján, az értesítésről mindig tudni fog
MULTITASK PushNotification – Toast – Phone voidSubscribeToPushNotificationChannel(stringchannelName) { HttpNotificationChannelpushChannel; // (1) Létezik e a csatorna? pushChannel = HttpNotificationChannel.Find(channelName); if (pushChannel == null) { // (2/a) Nemlétezik -> Létrehozzuk pushChannel = newHttpNotificationChannel(channelName); pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated; pushChannel.ErrorOccurred += PushChannel_ErrorOccurred; pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived; pushChannel.Open(); pushChannel.BindToShellToast(); }
MULTITASK PushNotification – Toast – Phone else { // (2/b) Létezik if (pushChannel.ChannelUri == null) { // (2/c) Létezik a csatorna, de nem tudjuk kiolvasni az URI-t pushChannel.UnbindToShellToast(); pushChannel.Close(); SubscribeToPushNotificationChannel(channelName); return; } // Feliratkozunkazeseményekre pushChannel.ChannelUriUpdated += PushChannel_ChannelUriUpdated; pushChannel.ErrorOccurred += PushChannel_ErrorOccurred; pushChannel.ShellToastNotificationReceived += PushChannel_ShellToastNotificationReceived; } varchannelURI = pushChannel.ChannelUri; }
MULTITASK PushNotification – Toast – Phone voidPushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) { varchannelURI = e.ChannelUri; } voidPushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e) { varerrorType = e.ErrorType; varerrorMessage = e.Message; varerrorCode = e.ErrorCode; varerrorAdditionalData = e.ErrorAdditionalData; }
MULTITASK PushNotification – Toast – Phone voidPushChannel_ShellToastNotificationReceived(object sender, NotificationEventArgs e) { StringBuilder message = newStringBuilder(); stringrelativeUri = string.Empty; message.AppendFormat("Received Toast {0}:\n", DateTime.Now.ToShortTimeString()); foreach (string key ine.Collection.Keys) { message.AppendFormat("{0}: {1}\n", key, e.Collection[key]); if (string.Compare( key, "wp:Param", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.CompareOptions.IgnoreCase) == 0) { relativeUri = e.Collection[key]; } } }
MULTITASK PushNotification – Toast – Server stringsubscriptionUri = TextBoxUri.Text.ToString(); HttpWebRequestsendNotificationRequest = (HttpWebRequest)WebRequest.Create(subscriptionUri); sendNotificationRequest.Method = "POST"; // Toast üzenet "teste" stringtoastMessage = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" + "<wp:Notificationxmlns:wp=\"WPNotification\">" + "<wp:Toast>" + "<wp:Text1>" + TextBoxTitle.Text.ToString() + "</wp:Text1>" + "<wp:Text2>" + TextBoxSubTitle.Text.ToString() + "</wp:Text2>" + "<wp:Param>/Page2.xaml?NavigatedFrom=Toast Notification</wp:Param>" + "</wp:Toast> " + "</wp:Notification>"; byte[] notificationMessage = Encoding.Default.GetBytes(toastMessage);
MULTITASK PushNotification – Toast – Server sendNotificationRequest.ContentLength= notificationMessage.Length; sendNotificationRequest.ContentType = "text/xml"; sendNotificationRequest.Headers.Add("X-WindowsPhone-Target", "toast"); sendNotificationRequest.Headers.Add("X-NotificationClass", "2"); using (StreamrequestStream = sendNotificationRequest.GetRequestStream()) { requestStream.Write(notificationMessage, 0, notificationMessage.Length); } HttpWebResponse response = (HttpWebResponse)sendNotificationRequest.GetResponse(); stringnotificationStatus = response.Headers["X-NotificationStatus"]; stringnotificationChannelStatus = response.Headers["X-SubscriptionStatus"]; stringdeviceConnectionStatus = response.Headers["X-DeviceConnectionStatus"]; TextBoxResponse.Text = notificationStatus + " | " + deviceConnectionStatus + " | " + notificationChannelStatus;
MULTITASK BackgroundNotification – Toast ShellToast notification = newShellToast(); notification.Title = "Title"; notification.Content = "Content"; notification.NavigationUri = newUri("MainPage.xaml?message=Hello World", UriKind.Relative); notification.Show();
MULTITASK értesítések – élő csempék A leglátványosabb módja az értesítésnek Egy alkalmazáshoz több csempe is tartozhat Minden csempének van elő –és hátlapja
MULTITASK ScheduledNotification – Tile ShellTileSchedule notification = newShellTileSchedule(); notification.Interval = UpdateInterval.EveryHour; // EveryDay, EveryWeek, EveryMonth notification.MaxUpdateCount = 10; // 0 -> végtelenségigmegy notification.Recurrence = UpdateRecurrence.Interval; // OneTime notification.StartTime = DateTime.Now; notification.RemoteImageUri = newUri("http://<IMAGE_URL>"); notification.Start(); // Stop()
MULTITASK PushNotification – Tile Nagyon hasonló a Toast-hoz Csak ezt nem lehet appon belül elkapni
MULTITASK BackgroundNotification – Tile // Másodlagoscsempelétrehozása ShellTile.Create(newUri("MainPage.xaml?message=Secondary Tile"), newStandardTileData { Title = "Front", Count = 0, //BackgroundImage = new Uri("<Background Image URI>"), BackTitle = "Back", BackContent = "Content" //BackBackgroundImage = new Uri("<Back Background Image URI>") });
MULTITASK BackgroundNotification – Tile // Csempéklistázása foreach (var tile inShellTile.ActiveTiles) { varnavigationURI = tile.NavigationUri; // lényegébenezaz ID // Csempe frissítése (az elsődleges csempe az első) tile.Update(newStandardTileData { Title = "Front", Count = 0, BackgroundImage = newUri("<Background Image URI>"), BackTitle = "Back", BackContent = "Content", BackBackgroundImage = newUri("<Back Background Image URI>") }); // Csempetörlése tile.Delete(); }
MULTITASK értesítések – figyelmeztetés Figyelmeztetés és emlékeztető Lényegében az értesítősáv időzített verziója Előre beállított időpontban kapjuk meg
MULTITASK ScheduledNotifications Reminderreminder = newReminder("Sample Reminder"); reminder.BeginTime = DateTime.Now; reminder.ExpirationTime = DateTime.Now + TimeSpan.FromDays(14); reminder.RecurrenceType = RecurrenceInterval.Daily; // Weekly, Monthly, EndOfMonth, Yearly, None reminder.Title = "Title"; reminder.Content = "Content"; reminder.NavigationUri = newUri("MainPage.xaml?message=From Reminder"); ScheduledActionService.Add(reminder); Alarmalarm = newAlarm("Sample Alarm"); alarm.BeginTime = DateTime.Now; alarm.ExpirationTime = DateTime.Now + TimeSpan.FromDays(14); alarm.RecurrenceType = RecurrenceInterval.Daily; // Weekly, Monthly, EndOfMonth, Yearly, None alarm.Title = "Title"; alarm.Content = "Content"; alarm.Sound = newUri("/Ringtones/Ring01.wma", UriKind.Relative); ScheduledActionService.Add(alarm);
MULTITASK értesítések – paraméterezhetőség A webes QueryString-hez hasonló megoldás Az értesítésekre kattintva az alkalmazás a megfelelő oldalon és a megfelelő állapotban tud elindulni