Технический обзор возможностей платформы Windows Phone Стас Павлов stas.pavlov@microsoft.com @stasus платформа Железо Емкостной дисплей 4 или более точек контакта Сенсоры A-GPS, Accelerometer, Compass, Light, Proximity, Gyro Камера 5 мегапикселей или более Мультимедиа возможности Минимальная спецификация, акселерация кодеков Память 256MB RAM или более, 8GB Flash или более GPU Акселерация инструкций DirectX 9 CPU Qualcomm MSM7x30, MSM8x55 800Mhz или более Аппаратные кнопки | Назад, Старт, Поиск API Приложения Ваше приложение Silverlight Frameworks XNA CLR (.NET CF) HTML/JavaScript App Model UI Model Cloud Integration App management Licensing Chamber isolation Software updates Shell frame Session manager Direct3D Compositor Xbox LIVE Bing Location Push notifications Windows Live ID Kernel Security Networking Storage Hardware BSP A-GPS Media Accelerometer Wi-Fi Hardware Light Radio Compass Graphics Proximity Gyro Сервисы Runtime Tools Sensors Media Data Location Phone Xbox LIVE Notifications .NET Framework managed code sandbox Device Cloud Platform Services Notifications Location Phone Emulator Samples Documentation Guides Community Packaging and Verification Tools Publishing Services App Deployment Registration Marketplace Identity Feeds Validation MO and CC Billing Social Maps Certification Business Intelligence Publishing Update Management Инструменты http://create.msdn.com Windows Phone SDK: Visual Studio 2010 Express Edition Expression Blend 4 for Windows Phone Windows Phone Extensions for XNA Game Studio 4.0 Windows Phone Developer Registration Tool Application Deployment Tool Windows Phone Emulator Performance and Memory Profiler Marketplace Test Kit Возможности Камера Сенсоры Сеть Данные GPS Прямой доступ к изображению и вспышке SQL CE Акселерометр Запуск и Выбор Элементы управления Bing Maps Базовые элементы Сокеты E-mail Компас Фото и видео Гироскоп Сенсор движения Контакты Информация о соединении Silverlight Toolkit Номер телефона Календарь Адрес Еще больше – от сообщества Расширение базовых приложений Тайлы Заголовок, текст, обратная сторона Уведомления Расширения Search Tile, Toasl, Raw Обновление программно и через веб-сервис Music Deep Toast Множественные тайлы Photos разработка Платформа – 2 типа приложений Современные приложения, управляемые событ-ми. Быстрое создание богатых графических приложений HTML/Javascript Устоявшаяся, надёжная, популярная технология Высокопроизводительная игровая платформа Быстрое создание многоэкранных 2D и 3D игр Богатая content pipeline Устоявшаяся технология для Xbox, Windows, и Zune / WP7 Приложения Игры (и игры) (и приложения) Silverlight Типы проектов 13 Что такое Silverlight в Windows Phone XAML .NET CF C#, VB.NET, F# XAML Наглядный язык разметки Поддержка включений файлов Полная интеграция в Visual Studio и Expression Blend Code Behind Data Binding Sample Data Storyboards Transform Silverlight Controls Silverlight Toolkit Hub`ы: панорамы и пивоты Декомпозиция экрана Навигация Frame Контейнер верхнего уровня PhoneApplicationFrame class Page Управляет содержимым экрана Потомок PhoneApplicationPage class Кнопка «Назад» Ориентация SupportedOrientations="Portrait" SupportedOrientations="PortraitOrLandscape" 21 Можно ограничивать Можно обрабатывать В большинстве случаев достаточно автоматической обработки Input Scope <TextBox InputScope="Number" ... Панель приложения до 4х иконок 48х48, ч/б и без круга остальные пункты в дополнительном меню помните о текущем контексте приложения XNA Что может XNA? Мощная математическая библиотека Content Pipeline Работа с 2D графикой Полноценная 3D графика (DirectX 9) Поддержка шейдеров (встроенные) Работа совместно с Silverlight Производительность Разработаны с Frameworks designed требованием for performance производителности Опробованныйdesigned успех на Frameworks игровых сценариях for performance В будущее WP7 –с Frameworks designed управляемым кодом! for performance Нет лишней сборки мусора 4+ года профилирования и оптимизации Эффективная работа на WP7 Оптимизированные мат.библиотеки API с переходом на нативный код XNAFramework Игры Ваш код Ваш контент Компоненты Starter Kits Extended Framework Application Model Content Pipeline Core Framework Graphics Audio Networking Gamer Gamer Services* Services Input Math Storage Платформа DirectX .NET CF XNA для разработчика Использует .NET Framework как основу Игры пишутся на C# Generics LINQ И т.д. Игры запускаются как управляемый код Безопасное исполнение кода Управление памятью Поддержка Windows, Xbox, Windows Phone 7 3D Полноценная поддержка 3D на уровне платформы Аппаратное ускорение для всего, что нужно и можно ускорять аппаратно 29 Игровой цикл Инициализация Загрузка ресурсов Обработка событий Вычисление сцены Определение хода игры Освобождение ресурсов 30 Обратная связь Игровой цикл Initialize() LoadContent() Update() Draw() UnloadContent() 31 Игровой цикл protected override void Update(GameTime gameTime) { // Allows the game to exit if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here base.Update(gameTime); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } Пример Game Loop Content Pipeline Унифицированная платформа для хранения, обработки и извлечения игровых ресурсов Набор “importers” для стандартных типов ресурсов - Разработчики могут создавать свои importers Ресурсы хранятся в специальном репозитории Типы файлов Название импортера Класс импортера Выходной класс .bmp, .dds, .dib, .hdr, .jpg, .pfm, .png, .ppm, .tga. XNA Texture Importer TextureImporter TextureContent .fx XNA Effect Importer EffectImporter EffectContent .x XNA X File Importer Ximporter NodeContent .fbx XNA Autodesk FBX Importer FbxImporter NodeContent .xml XNA XML Importer XmlImporter Object .xap XNA XACT Project Importer - - 5 эффектов BasicEffect DualTextureEffect AlphaTestEffect SkinnedEffect EnvironmentMapEffect Интеграция XNA и Silverlight «Обычная» страница 2. SharedGraphicsDeviceManager 3. UIRenderElement 1. Internet Explorer HTML5 WebBrowser Control – наше все <Grid x:Name="LayoutRoot" Background="Transparent"> <Grid x:Name="ContentPanel"> <phone:WebBrowser IsScriptEnabled="True" IsGeolocationEnabled="True"/> </Grid> </Grid> 3 базовые возможности Загрузить HTML Вызвать «хост» Выполнить скрипт на странице 3 базовые возможности Navigate / NavigateString window.external.Notify WebBrowser.InvokeScript Фреймворки PhoneGap http://phonegap.com PhoneGap Plugins Фреймворки http://jquerymobile.com/ jQuery jQuery Mobile + PhoneGap http://wiki.phonegap.com/w/page/36868306/UI%20Development%20using%20jQueryMobile IE9 модель исполнения приложений Жизненный цикл: состояния Running FAS (Fast Application Switching) выгружено из памяти; сохранены специальные словари Tumbstoned Dormant в памяти; потоки остановлены, ресурсы освобождены Жизненный цикл: события и методы Lunching Event Closing Event Application Application OnNavigateTo Method Page Runnin g OnNavigateFrom Method Page Activated Event Deactivated Event Application Application Tumbstoned Dormant Восстановление состояния Dormant приложение в памяти потоки остановлены ресурсы освобождены Tumbstoned приложение не в памяти сохранены специальные словари PhoneApplicationService.State PhoneApplicationPage.State Демо сохранение и восстановление состояния многозадачность Подходы к многозадачности «Честная» и прожорливая - Работаем, пока можем - Система сложных правил выгрузки приложений Desktop, Windows Mobile, Android Мнимая и экономная - Приложение выгружается при деактивации UI - Ключевой фактор – сохранение состояния Ранние iPhone, Windows Phone 7 Подходы к многозадачности Умная - Похожа на мнимую - Фоновые агенты iPhone 4, Windows Phone codename “Mango” - Возможны уведомления из агентов в приложения Жизненный цикл: состояния Running FAS (Fast Application Switching) выгружено из памяти; сохранены специальные словари Tumbstoned Dormant в памяти; потоки остановлены, ресурсы освобождены Fast Application Switching Другие варианты? Задача Переключение задач пользователем Реализация Уведомления и сигналы Background Notification Загрузка фалов Background Transfer Уведомления о событиях Push Notifications Регулярные действия по расписанию; toast/tile updates; data pre-caching; etc. Periodic Background Agent Проигрывание музыки Background Audio Player Синхронизация данных Resource-Intensive Agent GPS-tracking Run under the lock screen Fast App Switching Background Notification Service Reminders Alarms using Microsoft.Phone.Scheduler; using Microsoft.Phone.Scheduler; private void AddReminder(object sender, RoutedEventArgs e) { private voidreminder AddAlarm(object sender, RoutedEventArgs e) Reminder = new Reminder("CompanyMeeting"); { reminder.BeginTime = DateTime.Now.AddSeconds(15); Alarm alarm = new=Alarm("Long Day"); reminder.Content "Soccer Fields by The Commons"; alarm.BeginTime = DateTime.Now.AddSeconds(15); reminder.Title = "Microsoft Annual Company Product Fair 2009"; alarm.Content = "It's been a long day. Go to bed."; reminder.RecurrenceType = RecurrenceInterval.Yearly; alarm.Title = "Alarm"; = new Uri("/Reminder.xaml", UriKind.Relative); reminder.NavigationUri ScheduledActionService.Add(reminder); } ScheduledActionService.Add(alarm); } Демо notifications Background Transfer Service using Microsoft.Phone.BackgroundTransfer; My WP Book App downloads void GetCurrentProgress() DownloadWithBTS(Uri sourceUri, BtsProgressChanged(object sender, UriBackgroundTransferEventArgs destinationPath) e) { btr = new BackgroundTransferRequest(sourceUri, destinationUri); DrawProgressBar(btr.BytesReceived); } DrawProgressBar(e.Request.BytesReceived); btr.TransferStatusChanged += BtsStatusChanged; btr.TransferProgressChanged += BtsProgressChanged; } BackgroundTransferService.Add(btr); } Cheese & Win completed Great Mysterie WP Tips & Tric My WP Book App ISO Store Background Transfer Service Great Mysteries POST <~3.0 MB o Cloud <20 MB GET <2 GB Демо background file transfer Background Audio – HTML5 <audio id="audio_tag" controls="controls" src="http://html5audio.com/Demo1.mp3" onplay="StartPlayback()" onended="NextTrack()" </audio> function NextTrack() { musicPlayer = document.getElementById("audio_tag"); musicPlayer.src = 'http://html5audio.com/Demo2.mp3'; } Browser www.html5audio. Cloud Zune Service ++ Демо html5 audio Background Audio – По URL current fav 0:09 0:12 0:11 0:10 Ode to WP By MSFTMan Player = BackgroundAudioPlayer.Instance; void PlayStateChanged(object sender, EventArgs e) player.PlayStateChanged += new eventHandler(PlayStateChanged); { switch (player.PlayerState) AudioTrack track = new AudioTrack(new Uri("/audiofile.mp3"),…); { case PlayState.FastForwarding: player.Play(); // Move to next track break; } } My Music App ++ ISO Store Buffer Zune Service Buffer ++ Cloud Демо background audio agent Приложения + Агенты Разработка Приложение ОС myapp.dll Единое приложение UX Разные процессы Logic Cloud ISO Store Logic myappagent.dll Системны е сервисы Жизненный цикл агента Если системе необходимо Агенту пришло завершить агента: OnCancel(); агент должен время поработать быстро завершить работу Создан Работае т stopping Система Приостановленные Система Агенту вызывает больше Отсутствие приостанавливает работы агенты могут быть коднечего агентаделать NotifyComplete агент, а возможно, выгружены и убивает Нечего делать Неактивен Приостановлен Фатальная ошибка: Abort() Агенты могут бытьи «убийство» «убиты» из-за нехватки ресурсов Ошибка! «Убит» Агенты: общие правила Агенты: общие правила On Idle агенты Периодические агенты Выполнение Выполнение Внешнее питание, Wi-Fi или Каждые 30 минут USB Длительность Длительность 15 секунд 10 минут Сценарии Синхронизация данных Сценарии Загрузка данных Трекинг Синхронизация больших местоположения объемов … … Демо background agents использование возможностей платформы Интеграция Камера Сенсоры Networking Data GPS SQL CE Захват видео Accelerometer Launchers & Choosers Bing Maps Сокеты E-mail Compass «Прямой» доступ к камере и вспышке Phone Contacts Phone Number Gyro HTTP Phone Calendar Motion Address Chooser Демо возможности платформы launchers & choosers Доступ к пользовательским данным Chooser Tasks EmailAddressChooserTask PhoneNumberChooserTask AddressChooserTask Microsoft.Phone.UserData для прямого доступа Contacts Appointments Демо прямой доступ к контактам и встречам Расширения App Connect Search Тайлы Push Notifications Music Photos Демо возможности платформы live tiles Push Notifications Raw Tile Toast Deep Toast <wp:Notification xmlns:wp="WPNotification"> Связь уведомлений и страниц приложения страницами <wp:Toast> <wp:Text1>World News Updates</wp:Text1> <wp:Text2>Egypt braces for march in palace square</wp:Text2> <wp:Param>/detailsPage.xaml?storyid=186435</wp:Param> </wp:Toast> </wp:Notification> Демо возможности платформы push notification Локальное хранилище Isolated Storage Приложения хранят данные в Isolated Storage неструктурированные данные Обычные файлы и папки Настройки App Data Folder App WP7 Isolated Storage APIs Управление файлами Настройки Файлы приложения Демо возможности платформы WebClient & IsolatedStorage Локальное хранилище База данных var query = from w in db.Wines where w.Country == “USA" select w.Name; Custom Data Context .Call System.Linq.Queryable.Select( .Call System.Linq.Queryable.Where( .Constant(Table(Wines)), '(.Lambda #Lambda1)), '(.Lambda #Lambda2)) .Lambda #Lambda1(db.Wines $w) { $w.Country == “USA" } .Lambda #Lambda2(w.Country $w) { $w.Name } Object Identity Materialization Management select Name from Wines where Country = “USA” App Objects Change Tracking Update Processing Core ADO.NET (System.Data) SQLCE ADO.NET Provider (System.Data.SqlServerCe) SQLCE DB Демо возможности платформы SQL CE Геолокация Отдаёт географические координаты, высоту, скорость и направление при инициализации можно указать стандартная или высокая точность GeoCoordinateWatcher myGeoWatcher = new GeoCoordinateWatcher(); myGeoWatcher.MovementThreshold = 100.0f; myGeoWatcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(…); myGeoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(…); ThreadPool.QueueUserWorkItem(startMyGeoWotcher, myGeoWatcher); .... static void startMyGeoWotcher(object GeoWatcher) { ((GeoCoordinateWatcher)GeoWatcher).TryStart(false, TimeSpan.FromSeconds(60)); } Акселерометр Отдаёт вектор ускорения устройства в гравитационных единицах включает гравитацию сориентирован относительно устройства Accelerometer myAccel = new Accelerometer(); myAccel.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(…); myAccel.Start(); Гироскоп Скорость вращения устройства вокруг каждой из осей в радианах/сек Gyroscope myGyro = new Gyroscope(); myGyro.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<GyroscopeReading>>(…); myGyro.Start(); Компас (магнитометр) Точность измерения в градусах Направление на магнитный полюс (в градусах, против часовой стрелки) Направление на географический полюс (в градусах, против часовой стрелки) Данные магнитометра в виде вектора в микротеслах Compass myCompass = new Compass(); myCompass.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(…); myCompass.Start(); Демо Использование геолокационных данных, акселерометра и карты Motion sensor Motion Sensor Поддержка motion sensor Camera API PhotoCamera Silverlight 4 WebCam API Фото Простая запись видео Кнопки камеры Можно использовать существующий код Вспышка и фокус Запись аудио и видео в файл Демо Использование камеры ресурсы С чего начать http://create.msdn.com http://go.microsoft.com/?linkid=9772716 http://msdn.microsoft.com/ru-ru/windowsphone/ http://www.techdays.ru/?Tag=Windows Phone 7 http://windowsteamblog.com/windows_phone/ http://aka.ms/ruwp7dev - презентация и примеры спасибо The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. © 2011 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.