Windows Phone 7.x Pla1orma i programowanie SP2, ISWD, 2011-12
Referencje S.Wildermuth: Essen%al Windows Phone 7.5: Applica%on Development with Silverlight. Adison- Wesley 2012 M.Iantosca: Introduc%on to Mobile Applica%on Development Using Silverlight (hips://www.microsok.com/ educalon/facultyconneclon/arlcles/arlcledetails.aspx?cid=2368&c1=en- us&c2=0) Windows Phone Development (hip://msdn.microsok.com/en- us/library/ff402535%28vs.92%29.aspx) Ch.Petzold: Programming Windows Phone 7 Series. MicrosoK Press 2010 (hip://www.charlespetzold.com/phone)
Wprowadzenie
Windows CE Windows CE (Embedded Compact) Początkowo przycięta wersja Windows 95 (pierwsze netbooki?) Obecnie system operacyjny dla minimalistycznych komputerów i systemów osadzonych (inny niż Windows XP/7 Embedded) Oparty na architekturze komponentowej System czasu rzeczywistego Możliwość działania z 1 MB RAM i bez dysku Component- based, embedded, real- %me OS Możliwość skonfigurowania jako system zamknięty (bez rozszerzeń i aplikacji użytkownika, zapisane w ROM- ie) Baza dla wielu różnych pla1orm - - Pocket PC 2002, Windows Mobile 2003,, Windows Mobile 5.0, Windows Mobile 6
Historia Windows CE Windows CE 7.0 March 2011 Windows Phone 7.0 / 7.5
Windows CE 6.0 Nowe cechy systemowe 32 tys. procesów, 2GB pamięci wirtualnej na proces (poprzednio 32 procesy, 32MB pamięci wirtualnej na proces) System pliów ExFAT (bez ograniczenia 32GB na wolumen i 2GB na plik, dostosowany do pamięci flash) Wsparcie dla 512MB RAM Nowe cechy użytkowe Silverlight for Windows Embedded IE Embedded (panning/zooming) Flash Lite Dotyk i gesty Przeglądarki MS Office i PDF Windows Mobile 6.x bazuje na Windows CE 5.0 (5.2) z 2004!
Windows CE 7.0 Nowe cechy systemowe Wsparcie dla procesorów dual- core (ARM) Wsparcie dla 3GB RAM (pamięć fizyczna) Nowe cechy użytkowe Bluetooth 3.0 DLNA (Digital Living Network Alliance) MTP (Media Transfer Protocol) Windows Phone 7 IE z Flash 10.1... Podstawa dla Windows Phone 7.x
Windows Phone 7/7.5 Pla1orma programowa i sprzętowa Nowy UI (Metro) z koncentratorami zawartości (content hubs), aktywne ikony (live %les) i wielo- dotykiem Tworzenie aplikacji tylko w.net (C# i VB) Silverlight (wersja 4) XNA Aplikacje zatwierdzane przez MS i dostępne w Windows Phone Marketplace Aktualizacje systemu udostępniane przez MS (niezależne od producentów sprzętu i operatorów) 7.1 == 7.5 Windows Phone OS/SDK 7.1 ale Windows Phone Pla1orm (Mango) 7.5
Pla1orma sprzętowa Dokładna specyfikacja sprzętowa przygotowana przez MS (Hardware Chasis)
Pla1orma sprzętowa Mechanizmy do wprowadzania informacji
Metro UI koncentratory Grupują wybrane typy informacji (podejście data- driven zamiast applica%on- driven) Wsparcie ze strony API (kontrolka Panorama)
Przykłady koncentratorów Metro UI koncentratory
Metro UI aktywne ikony Podstawowy element ekranu startowego Możliwość wyświetlania dynamicznie zmieniającej się informacji Aktualizacja ikon przez aplikacje i usługi Ikony dwustronne oraz pozwalające na przejście do wybranych części (okien) w aplikacji (deep links) Wsparcie ze strony API
Rozpowszechnianie aplikacji Windows Phone Marketplace Obsługa płatności 70% zysku dla autora aplikacji Automatyczna aktualizacja aplikacji (darmowych i płatnych) Udostępnianie wersji demonstracyjnych i możliwość przejścia do wersji pełnej Koszt roczny 99$ 100 aplikacji darmowych, nieograniczona liczba aplikacji płatnych Autoryzacja 5 telefonów deweloperskich Możliwość autoryzacji telefonu bez konieczności uczestnictwa w Markteplace (?)
Wymagania dla aplikacji w Marketplace Odpowiednia jakość aplikacji Wyświetlenie początkowego ekranu w ciągu 5 sekund, pełne uruchomienie w ciągu 20 sekund Poprawna obsługa nawigacji za pomocą klawisza Back Bezpieczne zakończenie działania w razie wystąpienia wyjątku Zgodność z base applica%on policies Pełna funkcjonalność po instalacji aplikacji Informacja o konieczności ściągnięcia większej porcji danych (> 50MB) Rozmiar aplikacji do 500MB (20MB dla instalacji OTA) Zgodność z legal usage policies Płatności tylko w ramach Marketplace Zgoda użytkownika w wybranych sytuacjach (np. udostępnienie informacji osobistej, powiadomienia, dodatkowe zakupy) Reklamy zgodne z wytycznymi MS Zgodność z content policies
Technologie deweloperskie Silverlight Dla aplikacji użytkowych zamiast Windows Forms Pochodna WPF (Windows PresentaLon FoundaLon) Połączenie kodu i znaczników (XAML - - Extensible ApplicaLon Markup Language) Wersja 5 dla pla1orm desktopowych (Windows/ Mac), wersja 4 dla WP7.5 XNA (XNA is Not an Acronym) Pla1orma do programowania gier (2D, 3D) Pętla gry zamiast zdarzeń Dostępna dla Windows, Xbox oraz WP7 Możliwość połączenia obu technologii
Narzędzia deweloperskie Windows Phone SDK 7.1 Visual Studio 2010 Express for Windows Phone Środowisko samodzielnie Integracja z Visual Studio 2010 Professional (lub lepszym) MicrosoK Expression Blend Narzędzie do wizualnego projektowania interfejsu Windows Phone Emulator Wymaga DirectX 10 oraz sterowników WDDM 1.1! Silverlight for Windows Phone Toolkit (hip://silverlight.codeplex.com/) Dodatkowy zestaw kontrolek rozszerzający SDK
MicrosoK Expression Blend Otwieranie, modyfikacja oraz uruchamianie projektów stworzonych w Visual Studio
Windows Phone Emulator Możliwość symulacji zmiany fizycznego położenia oraz lokalizacji geograficznej
Hello, World!
Struktura aplikacji Ramka (PhoneApplicationFrame) Kontener najwyższego poziomu Jeden w aplikacji Strona (PhoneApplicationPage) Reprezentuje jeden ekran Jedna lub więcej w aplikacji Wyświetlana w ramce Elementy strony Pole systemowe (system tray) Tytuł aplikacji Tytuł strony Zawartość Pasek aplikacji (applica%on bar)
Elementy projektu
App.xaml / App.xaml.cs Zasoby wspólne dla całej aplikacji Deklaracja metod związanych z obsługą cyklu życia aplikacji Klasa implementująca aplikację (App) singleton (Application.Current) Metody związane z cyklem życia Metody obsługujące nieobsłużone wyjątki oraz błędy w nawigacji App.xaml à App.g.cs
MainPage.xaml / MainPage.xaml.cs Projekt (opis) UI dla aktualnej strony (nazwa pliku odpowiada nazwie klasy) Kod związany z obsługą zdarzeń na stronie Kod łączący wybrane elementy UI z obiektami.net (elementy z nazwami) MainPage.xaml à MainPage.g.cs
WMAppManifest.xml Ustawienia konfiguracyjne specyficzne dla aplikacji WP7.5 Meta dane Wymagane uprawnienia Strona startowa Zadania uruchamiane w tle Rozszerzenia koncentratorów Definicje aktywnych ikon
Format.XAP Format paczki z aplikacją dla WP7 Archiwum ZIP (łatwy dostęp po zmianie rozszerzenia pliku)
Projektowanie UI
Rozmieszczenie kontrolek na stronie Elementy UI rozmieszczane na stronie za pomocą kontenerów Możliwość wielokrotnego zagnieżdżania kontenerów
Kontrolki standardowe Proste (simple controls) TextBox RichTextBox PasswordBox Slider ProgressBar Z zawartością (content controls) możliwość zagnieżdżania XML- a Button CheckBox RadioButton HyperlinkButton tylko do odczytu! Listy (list controls) Możliwość wyświetlania kolekcji dowolnych danych (właściwość ItemSource) Możliwość definiowana szablonów dla wyświetlanych elementów ListBox
SIP (SoK Input Panel) Możliwość określenia rodzaju wirtualnej klawiatury (SIP) dla specyficznych typów informacji (właściwość InputScope)
Kontrolka Panorama Obszar (canvas) większy niż wyświetlacz Złożony z jednego lub wielu paneli (PanoramaItem) Możliwość dowolnego przewijania Wykorzystany do implementacji koncentratorów
Kontrolka Pivot Obszar większy niż wyświetlacz Złożony z jednego lub wielu paneli (PivotItem) Każdy panel zajmuje całą stronę Możliwość przechodzenia (skokowego) do sąsiednich paneli
Kontrolki z Silverlight Toolkit Dodatkowe kontrolki rozszerzające standardowy zestaw AutoCompleteBox ContextMenu DatePicker TimePicker ListPicker LongListSelector PerformanceProgressBar ToggleSwitch ExpanderView PhoneTextBox WrapPanel
Mechanizm Data Binding Powiązanie źródła danych z kontrolką UI Automatyczne ustawianie wartości kontrolki Automatyczna aktualizacja źródła danych Możliwość określenia mechanizmu konwersji oraz formatowania między źródłem danych a kontrolką UI Możliwość wiązania ze sobą kontrolek UI
Nawigacja w aplikacji
Nawigacja w aplikacji dla WP7 Aplikacja dla WP7 składa się z jednej lub kilku stron identyfikowanych za pomocą URI Nawigacja (oraz przekazywanie parametrów) zbliżona do nawigacji po stronach WWW Stos odwiedzonych stron Możliwość cofnięcia się do poprzedniej strony (przycisk Back) Cofnięcie się poza pierwszą stronę kończy aplikację /Views/SecondPage.xaml
Klasa NavigationService Udostępniona jako PhoneApplicationPage.NavigationService Funkcjonalność dostępna w PhoneApplicationFrame Metody do nawigacji NavigationService.Navigate(new Uri( MainPage.xaml, UriKind.Relative) NavigationService.GoBack() Dostęp do stosu odwiedzonych stron (tylko do odczytu) NavigationService.BackStack Możliwość usunięcia ostatnio odwiedzonej strony NavigationService.RemoveBackEntry() Wykorzystywana przez kontrolkę HyperlinkButton
Obsługa nawigacji Zestaw metod wirtualnych (nie zdarzeń!) w klasie PhoneApplicationPage OnNavigatingFrom(NavigatingCancelEventArgs e) Wywoływana w trakcie opuszczania strony Możliwość zablokowania przejścia OnNavigatedFrom(NavigationEventArgs e) OnNavigatedTo(NavigationEventArgs e) Parametry z URI dostępne jako NavigationContext.QueryString (tablica asocjacyjna)
Obsługa nawigacji MainPage.xaml.cs SecondPage.xaml.cs
UriMappings i UriMapper Bardziej czytelne URI oraz automatyczna konwersja ich fragmentów na parametry zapytania App.xaml.cs App.xaml MainPage.xaml
Cykl życia aplikacji
Stany aplikacji Tombstoning zamiast tradycyjnej wielozadaniowości Aplikacje usypiane lub wstrzymywane w wyniku deaktywacji Odtwarzanie stanu aplikacji podczas jej ponownej aktywacji Launching Uruchomienie aplikacji przez użytkownika Closing Zakończenie aplikacji przez użytkownika
Klasa PhoneApplicationService Singleton dostępny jako PhoneApplicationService.Current Obsługa cyklu życia aplikacji oraz przechowywanie danych użytkownika między deaktywacją a aktywacją aplikacji Obsługa poszczególnych zdarzeń w klasie App Application_Launching Application_Closing Application_Activated Application_Deactivated 10 sekund na aktywację! Dane użytkownika przechowywane w słowniku PhoneApplicationService.State (string à object) Automatyczny zapis i odczyt ustawień związanych z nawigacją (stos stron, ostatnio odwiedzona strona)
Wielo- dotyk i gesty
Poziomy obsługi wielo- dotyku Obsługa na poziomie klasy Touch i zdarzenia FrameReported Obsługa na poziomie klasy UIElement i zdarzeń związanych z gestami pinch/stretch i drag ManipulationStarted ManipulationCompleted ManipulationDelta Obsługa na poziomie klasy UIElement i gestów Tap Double- tap Hold
Zdarzenie FrameReported Opis zdarzenia dostępny w FrameReportedEventArgs GetPrimaryTouchPoint informacja o pierwszym dotkniętym punkcie (współrzędne względem wskazanej kontrolki) GetTouchPoints informacja o wszystkich punktach dotyku (współrzędne względne) Dla każdego punktu dotyku (TouchPoint) dostępna informacja o jego stanie, położeniu oraz dotykanej kontrolce
Zdarzenie ManipulationDelta Opis zdarzenia ManipulationDelta dostępny w ManipulationDeltaEventArgs (ManipulationDelta) Informacja o przesunięciu (transla%on) i skali (scale) Wielkości skumulowane dla całej manipulacji Zmiana w stosunku do ostatniego zdarzenia Informacja o kontrolce, której dotyczy manipulacja Informacja zagregowana brak rozróżnienia na poszczególne punkty dotyku
Integracja z funkcjami telefonu
Launchers i Choosers Uruchomienie wybranej funkcji telefonu Chooser pozwala na przekazanie pewnej informacji do aplikacji (zdarzenie wywoływane po zakończeniu choosera)
Przykłady wykorzystania Uwaga na tombstoning!
Obsługa kamery Klasa PhotoCamera możliwość wykonywania zdjęć z poziomu aplikacji (bez choosera) Konfiguracja kamery (fokus, redukcja czerwonych oczu) Przechwytywanie wykonanych zdjęć Klasa CaptureSource niskopoziomowy dostęp (na żywo) do kamery i mikrofonu AudioSink przetwarzanie danych z mikrofonu VideoSink przetwarzanie danych z kamery Dostęp do poszczególnych ramek danych
Aktywne ikony
Aktywne ikony Głowna ikona (main live %le) przypięta przez użytkownika do ekranu startowego i uruchamiająca aplikację Stan początkowy ikony opisany w WMAppManifest.xml, późniejsza możliwość zmiany z poziomu aplikacji Dodatkowe ikony (secondary %les) dodane z poziomu aplikacji i pozwalające na przejście do wskazanego ekranu (deep- link)
Przykład realizacji WMAppManifest.xml MainPage.xaml.cs DeepLink.xaml.cs
Pliki i bazy danych
Isolated Storage Wirtualny system plików dla każdej aplikacji (pełna izolacja bez współdzielenia informacji!) Klasa IsolatedStorageSettings słownik (string à object) pozwalający na zapis ustawień dla aplikacji Singleton IsolatedStorageSeetings.ApplicationSettings Wykorzystanie XML- a do serializacji Klasa IsolatedStorageFile dostęp do wirtualnego systemu plików (a nie pliku!) Instancja klasy zwracana przez IsolatedStorageFile. GetUserStoreForApplication Wsparcie dla typowych operacji IO (tworzenie, usuwanie plików i katalogów)
Przykładowe wykorzystanie
Baza danych SQL Server CE wbudowany w system Brak bezpośredniego dostępu za pomocą SQL (LINQ to SQL) Podejście code- first generacja schematu bazy danych na podstawie klas z odpowiednimi adnotacjami Plik bazy danych (.sdf) przechowywany w isolated storage (do 512 MB)
Przykładowe wykorzystanie
Pozostałe możliwości Definiowanie zależności 1:n i dostęp do obiektów nadrzędnych/podrzędnych adnotacja Association Aktualizacja schematu bazy danych (z poziomu aplikacji) klasa DatabaseSchemaUpdaterClass Szyfrowanie zawartości bazy danych i zabezpieczenie dostępu hasłem (hasło podawane jako element connec%on string)
Co jeszcze?
Inne ciekawostki Dostęp do koncentratorów i możliwość rejestracji aplikacji jako ich rozszerzenia Ograniczona wielozadaniowość agent działający w tle i wykonujący zlecone zadania (klasa ScheduledTaskAgent) PeriodicTask krótki, cyklicznie powtarzające się zadanie ResourceIntensiveTask dłuższe, jednorazowe zadanie wymagające wybranych zasobów (zewnętrzne zasilanie, połączenie WiFi, zablokowany ekran) Wysyłanie i pobieranie danych w tle Background Transfer Service (BTS) z wykorzystaniem HTTP/HTTPS (POST/GET)