Programowanie Windows Phone 7

82
7 Silverlight 4 dla Windows Phone 7 Bartłomiej Zass ISV Developer Evangelist Microsoft Polska

Transcript of Programowanie Windows Phone 7

Page 1: Programowanie Windows Phone 7

7Silverlight 4dla Windows Phone 7

Bartłomiej ZassISV Developer EvangelistMicrosoft Polska

Page 2: Programowanie Windows Phone 7

Wybrane elementy

Telefon – wstęp Marketplace Interfejs użytkownika Interakcja Nawigacja Tombstoning Akcelerometr

Launchers & Choosers WebBrowser Usługi lokalizacyjne Powiadomienia push Integracja z OS Media Inne

Page 3: Programowanie Windows Phone 7

Windows Phone 7

Całkiem nowy początek Inna grupa docelowa niż WM 6.x

Konsument: wygoda, design, platforma ZUNE

Windows Phone 7 vs Windows Embedded Handheld

Page 4: Programowanie Windows Phone 7

Inny nie bez powodu

Interfejs użytkownika

Integracja z sieciami społecznościowymi

Zupełnie nowe API Aplikacje użytkowe –

Silverlight Gry – XNA (XBOX)

Page 5: Programowanie Windows Phone 7

Metro

Page 6: Programowanie Windows Phone 7

Metro w Windows Phone 7

Page 7: Programowanie Windows Phone 7

Panorama Hub

Page 8: Programowanie Windows Phone 7

Unifikacja sprzętuRozdzielczość480x800 QVGA320x480 HVGA

Ekr. pojemnościowy4 lub więcej punktów

Aparat5 mega pixeli lub więcej

PrzyciskiStart, Szukaj, Wstecz

GPUAkceleracja DirectX 9

Pamięć256MB RAM lub więcej8GB flash lub więcej

MultimediaDokładna specyfikacjaAkceleracja kodeków

SensoryA-GPS, Akcelerometr, Kompas, Światło, Czujnik zbliżeniowy

480 lub 320

80

0 lu

b 4

80

Radio FM

Page 9: Programowanie Windows Phone 7

Interfejs telefonu Analogiczny do przeglądarki internetowej 3 przyciski

Wstecz Start Wyszukiwanie

Page 10: Programowanie Windows Phone 7

demo

Page 11: Programowanie Windows Phone 7

Marketplace Sklep / katalog z aplikacjami, grami i

muzyką Na każdym telefonie (domyślnie jako

quickstart) Jedyna możliwość wgrania aplikacji Dobry pomysł na zarobek

70% zysków ze sprzedaży Globalny rynek iPhone’owi milionerzy = 1 USD * 100 000

Page 12: Programowanie Windows Phone 7

Zasięg

30 rynków

Page 13: Programowanie Windows Phone 7

Marketplace - warunki Rejestracja - 100 USD za rok

Studenci 5 aplikacji bezpłatnych, kolejne 19,99 USD

Model reklamowy Dowolna liczba aplikacji płatnych http://create.msdn.com

Rejestracja i weryfikacja konta Możliwość przetestowania w biurze Microsoft

lub na ITAD

Page 14: Programowanie Windows Phone 7

Marketplace - cechy Codzienna, zlokalizowana promocja Trial API Różne modele biznesowe

Paid, freemium, reklamy, bezpłatne Różne modele płatności

Karta kredytowa, billing Automatyczne aktualizacje (push) Reguły (content policies)

Page 15: Programowanie Windows Phone 7

Marketplace - cechy Miesięczna wypłata Proces rejestracji

Potwierdzenie adresu e-mail Aktywacja konta – średnio 10 dni Wypłata – formularz W8B

Certyfikacja – średnio 5 dni

Page 16: Programowanie Windows Phone 7

Dystrybucja Dystrybucja beta

Do wybranej grupy użytkowników (live ID)

Deeplink przesyłany poprzez e-mail Okres beta – krótki, określony

Wiele języków w jednym pliku XAP

Page 17: Programowanie Windows Phone 7

Urządzenia deweloperskie Konieczne aktywne konto w Marketplace

Max 3 telefony deweloperskie Studenci

Max 1 telefon deweloperski Pełna aktywacja po zgłoszeniu aplikacji

Page 18: Programowanie Windows Phone 7

Integracja z aplikacją MarketplaceDetailTask

ContentType: Application | Music ContentID: null (detale aktualnej), lub

app ID MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask

Page 19: Programowanie Windows Phone 7

demo

Page 20: Programowanie Windows Phone 7

Silverlight dla Windows Phone

Bazuje na Silverlight 3 (zmodyfikowany)

Elementy Silverlight 4 Dodatkowe funkcjonalności Tylko out-of-browser (większe

uprawnienia)

Page 21: Programowanie Windows Phone 7

PhoneApplicationService App.xaml Zdarzenia globalne dla aplikacji

Launching Closing Activated Deactivated

Page 22: Programowanie Windows Phone 7

Capabilities WMAppManifest.xml Deklaracja zapotrzebowania na konkretną

funkcję Bezpieczeństwo!

Marketplace Informacje o aplikacji Ostrzeżenie podczas instalacji Ostrzeżenie, kiedy funkcja zostanie

wywołana UnauthorizedException (brak API do

sprawdzania)

Page 23: Programowanie Windows Phone 7

Capabilities – c.d.Capability Klasa lub namespace, która jej wymagaID_CAP_MEDIALIB MediaStreamSource,

Microsoft.Devices.Radio, Microsoft.Xna.Framework.Media.MediaLibrary and MediaSource, Microsoft.Devices.MediaHistory

ID_CAP_NETWORKING System.Net, Microsoft.Xna.Framework.GamerServices.GamerServicesComponent, WebBrowser class, Smooth Streaming Media Element (SSME) ID_CAP_PUSH_NOTIFICATION

ID_CAP_SENSORS Microsoft.Devices.Sensors

ID_CAP_MICROPHONE Microsoft.Xna.Framework.Audio.Microphone

ID_CAP_PHONEDIALER Microsoft.Phone.Tasks

ID_CAP_PUSH_NOTIFICATION Microsoft.Phone.Notification

ID_CAP_WEBBROWSERCOMPONENT

WebBrowser class

ID_CAP_LOCATION System.Device.Location

Page 24: Programowanie Windows Phone 7

Interfejs użytkownika Prosty i elegancki Ekran pojemnościowy (wielkość!) Skórki

Ciemna Jasna (bateria!)

Kolor akcentu - wiodący Automatyczne skinowanie kontrolek

wbudowanych Możliwość nadpisania każdego elementu

skórki

Page 25: Programowanie Windows Phone 7

Themes (skórki) Domyślne zasoby globalne http://msdn.microsoft.com/en-us/library/ff7

69552(VS.92).aspx

Projektowatnie interfejsu - wyświetlacz OLED (Organic Emitting Diode) Czerń – połowa mocy LCD Biel – trzykrotna moc LCD 30 klatek na sekundę

Page 26: Programowanie Windows Phone 7

Kontrolki systemowe Menu „Application Bar”

Maksymalnie 4 przyciski Menu – rzadziej używane zadania Możliwa przezroczystość

System Tray (możliwość schowania)

Page 27: Programowanie Windows Phone 7

Grafika - Silverlight Kontrolka Image

JPEG i PNG (XNA dodatkowo GIF) Źródło

Build action = Resource lub Content Internet URL

BitmapImage new BitmapImage(URI) ImageOpened, ImageFailed, DownloadProgress

Rozmiar aplikacji vs rozmiar zdjęć Camera chooser

Page 28: Programowanie Windows Phone 7

Orientacja ekranu Możliwość obrócenia ekranu

Akcelerometr Klawiaturka

Obsługa automatyczna Własne zdarzenie

(dodatkowe operacje)

Page 29: Programowanie Windows Phone 7

Panorama

Page 30: Programowanie Windows Phone 7

Pivot

Page 31: Programowanie Windows Phone 7

Efekt Tilt Efekt „pływających” przycisków Dołączany jako Attached Property

ButtonBase, ListBoxItem Najcześciej PhoneApplicationFrame

Możliwe włączenie dla wybranego kontenera

Właściwości IsEnabled SuppressTilt

Page 32: Programowanie Windows Phone 7

demo

Page 33: Programowanie Windows Phone 7

Interakcja TextBox zintegrowany z

Software Input Scope Tekst, URL, liczba, czas,

telefon, e-mail, hasło, chat Klawiatura - opcjonalnie

Page 34: Programowanie Windows Phone 7

Touch w Silverlight TouchPanel.GetCapabilities

IsConnected MaximumTouchCount TouchPanel.GetState()

Niskopoziomowo – Touch.FrameReported GetTouchPoints GetPrimaryTouchPoint i args.SuspendMousePromotionUntilTouchUp() TouchPoint -> TouchDevice.DirectlyOver

Zdarzenia Manipulation (max 2 punkty) ManipulationStarted, ManipulationDelta, ManipulationCompleted ManipulationDeltaEventArgs – Velocities, FinalVelocities

LinearVelocity, ExpansionVelocity Dla kontrolki (sender) Dla kontenera (args.OriginalSource – Routed Events)

Page 36: Programowanie Windows Phone 7

Gesty Standardowe kontrolki automatycznie Silverlight Toolkit

<Grid x:Name="LayoutRoot" Background="Transparent"><toolkit:GestureService.GestureListener>

<toolkit:GestureListener x:Name="gl" /></toolkit:GestureService.GestureListener>

</Grid>

XNA Gestures ManipulationCompleted TouchPanel.ReadGesture();

Page 37: Programowanie Windows Phone 7

demo

Page 38: Programowanie Windows Phone 7

Nawigacja domyślnie w Silverlight

Application

UserControl

ContentContent Content

Page 39: Programowanie Windows Phone 7

Silverlight 3 Navigation

UserControl

Frame

Page 3Page 1 Page 2

Application

Application

UserControl

ContentContent Content

Page 40: Programowanie Windows Phone 7

?Windows Phone 7

UserControl

Frame

Page 3Page 1 Page 2

Application

Application

Frame

Page 3Page 1 Page 2

Page 41: Programowanie Windows Phone 7

Nawigacja PhoneApplicationFrame,

PhoneApplicationPage Przycisk wstecz

Przełączanie między aplikacjami Możliwość nadpisania obsługi zdarzenia

OnNavigating(ed)From, OnBackKeyPress e.Cancel

NavigationService GoBack, CanGoBack NavigateTo GoForward – brak

UriMapper

Page 42: Programowanie Windows Phone 7

demo

Page 43: Programowanie Windows Phone 7

Świat pełen przerwań…phone calls

App

switc

h

reminders

low

batterylock

screen

Page 44: Programowanie Windows Phone 7

Tombstoning Brak przetwarzania w tle

Długotrwałe obliczenia – chmura Aplikacja nigdy nie działa w tle – system ją

zatrzymuje Cykl życia aplikacji

Running Closing Deactivating Activating

Stan aplikacji Stan wizualny – focus, scroll, itp.

Page 45: Programowanie Windows Phone 7

Tombstoning Zamrażanie aplikacji Dostępne zdarzenia

Launched (uruchomienie) Closed (przycisk back) Deactivated (przycisk start, telefon, sms,

…) Activated (przycisk back po wyjściu z

aplikacji) Debugowanie

Ponownie F5 w ciągu 10 sekund

Page 46: Programowanie Windows Phone 7

Przywracanie stanu PhoneApplicationPage

Ustawienia pojedynczej strony OnNavigatedFrom OnNavigatingFrom OnNavigatedTo

PhoneApplicationService.Current.State Dane tymczasowe (np. stan interfejsu

użytkownika) Dictionary<string, object> Wyłącznie obiekty serializowalne Publiczny bezparametrowy konstruktor

Page 47: Programowanie Windows Phone 7

Wyjątki PhotoChooserTask CameraCaptureTask MediaPlayerLauncher EmailAddressChooserTask PhoneNumberChooserTask Multiplayer Game Invite [games] Gamer You Card [games]

Page 48: Programowanie Windows Phone 7

Isolated Storage Ustawienia globalne aplikacji IsolatedStorageSettings IsolatedStorageFile

Wirtualne pliki przechowywane w pamięci flash

Brak ograniczeń przestrzeni

Page 49: Programowanie Windows Phone 7

demo

Page 50: Programowanie Windows Phone 7

Akcelerometr

Mierzy siłe przyłożoną do każdej osi

+Y

-Y

+X-X

+Z

-ZPrzynajmniej 1 sensor

Grawitacja i inne źródła

W planach kalibracja

Page 51: Programowanie Windows Phone 7

Akcelerometr Microsoft.Devices.Sensors Wektor X, Y, Z (zasada prawej dłoni) Wartość - twierdzenie pitagorasa

1 = 1g (przyspieszenie ziemskie) Standardowa pozycja: [0, 0, -1] Możliwe odchylenie ok. 10%

Accelerometer.ReadingChanged Dispatcher!

Page 52: Programowanie Windows Phone 7

demo

Page 53: Programowanie Windows Phone 7

Launchers MediaPlayerLauncher PhoneCallTask PhoneNumberChooserTask PhotoChooserTask SaveEmailAddressTask SavePhoneNumberTask SearchTask SMSComposeTask WebBrowserTask

CameraCaptureTask EmailAddressChooserTask EmailComposeTask MarketplaceDetailTask MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask

Page 54: Programowanie Windows Phone 7

Choosers EmailAddressChooserTask CaptureCameraTask PhoneNumberChooserTask PhotoChooserTask

Page 55: Programowanie Windows Phone 7

demo

Page 56: Programowanie Windows Phone 7

Kontrolka Web Browser Zdalna i lokalna zawartość Obsługa gestów – pan, double tap, pinch Transformacje Możliwość interakcji z JavaScript Prywatność

Skrypt domyślnie wyłączony Ciasteczka i cache wyizolowane

Page 57: Programowanie Windows Phone 7

Silverlight -> JS

function runScriptStuff(arg1, arg2){ return “awesome”; }

string out = wb.InvokeScript("runScriptStuff", arg1, arg2);

javascript

Page 58: Programowanie Windows Phone 7

JS -> Silverlight

window.external.Notify(string);

void wb_ScriptNotify(object s, NotifyEventArgs e){ string return = e.Value;}

javascript

Page 59: Programowanie Windows Phone 7

demo

Page 60: Programowanie Windows Phone 7

Lokalizacja

Location services

WiFi

+ Dokładność- Energia- Szybkość- Zasięg

- Dokładność+ Energia+ Szybkość- Zasięg

+/- Dokładność+/- Energia+/- Szybkość+/- Miasta

GPS

Nadajniki BTS

Page 61: Programowanie Windows Phone 7

Usługi lokalizacyjne Analogiczne API do Windows 7

Kompromis pomiędzy dokładnością, czasem i energią

Jednorodne API pomiędzy urządzeniami

Page 62: Programowanie Windows Phone 7

A-GPS Assisted GPS System.Device.Location GeoCoordinateWatcher

GeoPostitionAccuracy: High | Default PositionChanged

PositionChanged udostępnia e.Position.Location Longitude (-180 – 180), Latitude (-90 - 90) VerticalAccuracy, HorizontalAccuracy - dokładność Speed - szybkość Course (0-360) - kierunek Altitude – wysokość GeoCoordinate -> GetDistanceTo

Page 63: Programowanie Windows Phone 7

Bing Maps https://www.bingmapsportal.com/

Bezpłatne dla rozwiązań mobilnych Usługi (SOAP, JSON, REST …)

Geocode / ReverseGeocode – adresy Search – np. restaurant in Warsaw Imagery Service – grafika Route – trasy

Kontrolka Bing Maps dla WP7

Page 64: Programowanie Windows Phone 7

demo

Page 65: Programowanie Windows Phone 7

Notyfikacje push

Komunikacja inicjowana przez serwer Analogiczne do Exchange Push

Przetwarzanie po stronie serwera Oszczędza baterię i poprawia użyteczność

Page 66: Programowanie Windows Phone 7

Typy notyfikacji

New photos online!

Seattle, WA: Sunny and 85 degrees

1415

Page 67: Programowanie Windows Phone 7

Notyfikacje push

Push client

Push service

Your service

Tile

App

Toast

Send push data to URI

Send push data to

client

Send URI to server

Open push channelReturn URIData to App

Data to toast

Data to tile

Event

Page 68: Programowanie Windows Phone 7

Push HttpNotificationChannel

Jeden dla aplikacji Konieczne uzupełnienie Publisher w

WMAppManifest

Page 69: Programowanie Windows Phone 7

Usługa push - odpowiedzi Status notyfikacji

Received QueueFull Suppressed Dropped

Status urządzenia Connected Temporarily Disconnected

Status subskrybcji Active, Expired

Page 70: Programowanie Windows Phone 7

demo

Page 71: Programowanie Windows Phone 7

Kafelki Notyfikacje push ShellTileSchedule

Aktualizacja ikony aplikacji Minimum 1h Jednorazowo lub cyklicznie

Page 72: Programowanie Windows Phone 7

Integracja z OS Launchers („uruchom i zapomnij”) Choosers („okna dialogowe”) MediaLibrary MediaHistoryTask Pictures

Share Extras

Page 73: Programowanie Windows Phone 7

demo

Page 74: Programowanie Windows Phone 7

Wibracja Uruchamia wibrację na dany okres czasu

Przywołanie uwagi użytkownika Powiadomienia o zmianach Itp..

VibrateController vc = VibrateController.Default;vc.Start(TimeSpan.FromSeconds(3));

Page 75: Programowanie Windows Phone 7

Media Obsługa mediów

Dekodowanie sprzętowe PlayReady DRM

Ograniczenia MediaElement Tylko jeden Brak VideoBrush (przysłanianie, itp.)

Radio FM

Page 76: Programowanie Windows Phone 7

Integracja z XNA Dostępne wszystkie assembly oprócz:

Microsoft.Xna.Framework.Game Microsoft.Xna.Framework.Graphics

SoundEffect Większa wydajność niż MediaElementSoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("hand-clap-1.wav")); soundEffectInstance = se.CreateInstance(); soundEffectInstance.IsLooped = true; soundEffectInstance.Play();

Page 77: Programowanie Windows Phone 7

Integracja z XNA (2) Mikrofon

RAW PCM WAV DynamicSoundEffectInstance – dźwięki

dynamicznie MediaLibrary

Obrazy i muzyka (bez DRM) Także zapis zdjęć (muzyki nie) Song (Song.FromUri(„”),

MediaPlayer.Play(song) MathHelper, Vector, itp. GameServices

Page 78: Programowanie Windows Phone 7

Integracja z XNA (3) Gesty –

Microsoft.Xna.Framework.Input.Touch<Grid x:Name="ContentPanel" Grid.Row="1" ManipulationCompleted="ContentPanel_ManipulationCompleted">

TouchPanel.EnabledGestures = GestureType.Pinch | GestureType.Hold | GestureType.DoubleTap;

private void ContentPanel_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e){    while (TouchPanel.IsGestureAvailable)    {        GestureSample gesture = TouchPanel.ReadGesture();         if (gesture.GestureType == GestureType.Pinch)        {            // Do something with pinch        }      }

Page 79: Programowanie Windows Phone 7

demo

Page 80: Programowanie Windows Phone 7

Inne Blokada ekranu Menu kontekstowe

Page 81: Programowanie Windows Phone 7

demo

Page 82: Programowanie Windows Phone 7