Programowanie Windows Phone 7

Post on 24-May-2015

1.669 views 1 download

Tags:

Transcript of Programowanie Windows Phone 7

7Silverlight 4dla Windows Phone 7

Bartłomiej ZassISV Developer EvangelistMicrosoft Polska

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

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

Inny nie bez powodu

Interfejs użytkownika

Integracja z sieciami społecznościowymi

Zupełnie nowe API Aplikacje użytkowe –

Silverlight Gry – XNA (XBOX)

Metro

Metro w Windows Phone 7

Panorama Hub

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

Interfejs telefonu Analogiczny do przeglądarki internetowej 3 przyciski

Wstecz Start Wyszukiwanie

demo

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

Zasięg

30 rynków

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

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)

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

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

Urządzenia deweloperskie Konieczne aktywne konto w Marketplace

Max 3 telefony deweloperskie Studenci

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

Integracja z aplikacją MarketplaceDetailTask

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

app ID MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask

demo

Silverlight dla Windows Phone

Bazuje na Silverlight 3 (zmodyfikowany)

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

uprawnienia)

PhoneApplicationService App.xaml Zdarzenia globalne dla aplikacji

Launching Closing Activated Deactivated

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)

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

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

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ę

Kontrolki systemowe Menu „Application Bar”

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

System Tray (możliwość schowania)

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

Orientacja ekranu Możliwość obrócenia ekranu

Akcelerometr Klawiaturka

Obsługa automatyczna Własne zdarzenie

(dodatkowe operacje)

Panorama

Pivot

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

demo

Interakcja TextBox zintegrowany z

Software Input Scope Tekst, URL, liczba, czas,

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

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)

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();

demo

Nawigacja domyślnie w Silverlight

Application

UserControl

ContentContent Content

Silverlight 3 Navigation

UserControl

Frame

Page 3Page 1 Page 2

Application

Application

UserControl

ContentContent Content

?Windows Phone 7

UserControl

Frame

Page 3Page 1 Page 2

Application

Application

Frame

Page 3Page 1 Page 2

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

demo

Świat pełen przerwań…phone calls

App

switc

h

reminders

low

batterylock

screen

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.

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

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

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

Isolated Storage Ustawienia globalne aplikacji IsolatedStorageSettings IsolatedStorageFile

Wirtualne pliki przechowywane w pamięci flash

Brak ograniczeń przestrzeni

demo

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

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!

demo

Launchers MediaPlayerLauncher PhoneCallTask PhoneNumberChooserTask PhotoChooserTask SaveEmailAddressTask SavePhoneNumberTask SearchTask SMSComposeTask WebBrowserTask

CameraCaptureTask EmailAddressChooserTask EmailComposeTask MarketplaceDetailTask MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask

Choosers EmailAddressChooserTask CaptureCameraTask PhoneNumberChooserTask PhotoChooserTask

demo

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

Silverlight -> JS

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

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

javascript

JS -> Silverlight

window.external.Notify(string);

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

javascript

demo

Lokalizacja

Location services

WiFi

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

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

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

GPS

Nadajniki BTS

Usługi lokalizacyjne Analogiczne API do Windows 7

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

Jednorodne API pomiędzy urządzeniami

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

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

demo

Notyfikacje push

Komunikacja inicjowana przez serwer Analogiczne do Exchange Push

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

Typy notyfikacji

New photos online!

Seattle, WA: Sunny and 85 degrees

1415

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

Push HttpNotificationChannel

Jeden dla aplikacji Konieczne uzupełnienie Publisher w

WMAppManifest

Usługa push - odpowiedzi Status notyfikacji

Received QueueFull Suppressed Dropped

Status urządzenia Connected Temporarily Disconnected

Status subskrybcji Active, Expired

demo

Kafelki Notyfikacje push ShellTileSchedule

Aktualizacja ikony aplikacji Minimum 1h Jednorazowo lub cyklicznie

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

Share Extras

demo

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));

Media Obsługa mediów

Dekodowanie sprzętowe PlayReady DRM

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

Radio FM

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();

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

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        }      }

demo

Inne Blokada ekranu Menu kontekstowe

demo