Silverlight 4 dla Windows Phone 7
description
Transcript of Silverlight 4 dla 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ęcejPrzyciskiStart, 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
800 lub 480
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
switch
reminders
low
batterylock scree
n
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 pushPush 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