Сергей Байдачный Специалист по разработке программного обеспечения Майкрософт Украина
Конкурс приложений для Windows Phone
Windows Phone Содержание «Живые» плитки в Windows Phone 8 Интеграция с экраном блокировки Работа с хранилищами данных «Глубокие» ссылки и ассоциации с файлами
Windows Phone Компиляция в облаке Все приложения на Windows Phone 8 устанавливаются в готовом к использованию виде: – Стандартная утилита Ngen – Актуально для приложений WP 7.x и WP 8 – Разработчик загружает обычный.xap – WP 7.x устройства получают.xap файл вместо готовой к использованию версии
Windows Phone Fast Application Resume (FAR) Жизненный цикл приложения предполагает возможность «засыпать» в памяти FAR в Windows Phone 7.x – переход к приложению в памяти по кнопке Back Почему именно так? Windows Phone 8 – Возможность «будить» приложение из любого места – Разработчик сам принимает решение
Windows Phone FAR: Реализация Изменение в манифесте – Атрибут ActivationPolicy Обработка событий Navigating и Navigated – Определение способа запуска – Очистка стека вызовов или возврат на последнюю страницу – Проверка на возможность запуска через Secondary Tiles
Windows Phone Демонстрация FAR Пример использования
Windows Phone Персонализация устройства Они все одинаковые….
Windows Phone Flip Tile Шаблон (TemplateFlip, FlipTileData) medium: 336x336 small: 159x159 wide: 691x336
Windows Phone Cycle Tile Шаблон (TemplateCycle, CycleTileData) medium: 336x336 small: 159x159 wide center crops to medium wide: 691x336
Iconic Tile Шаблон (TemplateIconic, IconicTileData) medium: 202x202 small: 110x110 white with transparency only crop tight on horizontal
Windows Phone Новые типы плиток Демонстрация
Работа старых приложений
Windows Phone Работа старых приложений Вы можете использовать Reflection для доступа к новым классам на платформе WP пример библиотеки для WP 7.x по расширению возможности плиток
Windows Phone Интеграция с экраном блокировки Отображение контента из приложения на экране блокировки Отображение иконки и счетчика (когда счетчик >0) Работает вне зависимости от того, прикреплена ли плитка на основной экран Задается в манифесте с помощью Extensions элемента
Windows Phone Обновление заставки Пользователь может выбрать провайдера изображений в lock screen настройках ?WallpaperSettings=1 Приложение может запросить пользователя на право быть провайдером картинок Предоставляйте DefaultLockScreen.jpg в корне XAP Задается в манифесте с помощью Extensions элемента
Windows Phone StorageFile и StorageFolder Простой способ взаимодействия с директориями и файлами Используется в следующих случаях: – Доступ через InstalledLocation (в текущем объекте типа Package) к директории приложения – Доступ к локальной директории приложения, предназначенной для хранения файлов, изолированных от других приложений (LocalFolder) – Доступ к специальным директориям (в LocalFolder) ISETool.exe – утилита для работы с директориями приложения в устройстве
Windows Phone Расширена работа с Media Library Добавление и удаление музыки – SaveSong и Delete Получение абсолютного пути к элементу Данные хранятся как в памяти телефона, так и на внешних SD картах
Windows Phone Работа с данными на SD карте Приложение должно задекларировать эту возможность Работа осуществляется только с ассоциированными с приложением файлами Дополнительный набор классов: – ExternalStorageDevice – ExternalStorageFile – ExternalStorageFolder
Windows Phone Интеграция с контактами Приложения в Windows Phone 8 могут создавать свои группы контактов Контакты приложения интегрируются в стандартный Contact Hub К другим группам контактов приложение имеет доступ только на чтение (как и в WP 7.x)
Windows Phone Немного о классе Launcher Пример запуска страницы сайта Пример запуска внешнего приложения – ms-settings-lock: Передача файла private async void LauchSomething() { StorageFolder local = ApplicationData.Current.LocalFolder; StorageFile bqfile = await local.GetFileAsync("myfile.myex"); bool b=await Launcher.LaunchFileAsync(bqfile); }
Windows Phone Ассоциация задана Launch URI: skype:call?
Windows Phone Нет приложений
Windows Phone 2+ приложения
Windows Phone Создание ссылок Добавление элементов в манифест
Windows Phone Создание ассоциации: иконки
Windows Phone Запуск приложений через Proximity Запуск приложения на удаленном устройстве ProximityDevice device = ProximityDevice.GetDefault(); if (device != null) { long Id = device.PublishUriMessage( new System.Uri("contoso:NewProducts")); }
Windows Phone Вопросы?
Сергей Байдачный Специалист по разработке программного обеспечения Майкрософт Украина
Windows Phone Содержание Карты и местоположение Распознавание голоса Кошелек Коммуникации И другое…..
Windows Phone Доступно из C# и C++ Позволяет определять положение через интервал времени или базируясь на перемещениях Позволяет задать точность в метрах и время Позволяет задать максимальный «возраст» данных.Net APIs Windows Runtime APIs Предустановленная точность Проблемы с кешированием Только из управляемых приложений Требует вызова Start и Stop A- GPS Wi-fi Cell Доступные APIs
Windows Phone Определение позиции public async Task GetSinglePositionAsync() { Geolocator geolocator = new Geolocator(); geolocator.DesiredAccuracyInMeters = 10; Geoposition geoposition = await geolocator.GetGeopositionAsync( TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(30)); return geoposition.Coordinate; }
Windows Phone Отслеживание изменений private Geolocator trackingGeolocator; private TypedEventHandler positionChangedHandler; public void StartTracking() { trackingGeolocator = new Geolocator(); trackingGeolocator.MovementThreshold = 100; // или trackingGeolocator.ReportInterval = (uint)TimeSpan.FromSeconds(30).TotalMilliseconds; positionChangedHandler = (geolocator, eventArgs) => {}; trackingGeolocator.PositionChanged += positionChangedHandler; } public void StopTracking() { trackingGeolocator.PositionChanged -= positionChangedHandler; }
Windows Phone Windows Phone 8 Map Control
Windows Phone Windows Phone Maps Services
Windows Phone Part of Windows Phone Toolkit MapsUserControl PushPin ToGeoCoordinate Map Control & Service APIs Map Toolkit Extensions ID_CAP_MAP and ID_CAP_LOCATION Developer Token assigned through Windows Phone Developer Center.Net Windows Phone Map and Services API
Windows Phone Настройка приложения App manifest:
Windows Phone Ограничения Только в XAML приложениях Только одно приложение может быть запущено Ограничения по доступу к ресурсам
Windows Phone Использование ресурсов CPU затраты на уровне10% Доступ к Location Audio\Speech Network Storage Sensors Нет доступа к камере и микрофону ShellToast и ShellTile.Update
Windows Phone Контроль со стороны пользователя ID_CAP_LOCATION Пользователь может закрыть приложение Пользователь может запретить функциональность для приложения
Windows Phone Деактивация
Windows Phone Управление голосом Более гибкая настройка приложения для управления голосом Поддержка API по распознаванию голоса Поддержка API по синтезу голоса
Windows Phone Синтез голоса async private void ButtonTTS_Click(object sender, RoutedEventArgs e) { SpeechSynthesizer synth = new SpeechSynthesizer(); await synth.SpeakTextAsync( "You have a meeting with Peter in 15 minutes."); }
Windows Phone Распознавание голоса async private void ButtonSR_Click(object sender, RoutedEventArgs e) { SpeechRecognizer reco = new SpeechRecognizer(); // Use the default short message dictation grammar SpeechRecognitionResult recoResult = await reco.RecognizeAsync(); // Do something with the recognition result MessageBox.Show(string.Format("You said {0}.", recoResult.Text)); }
Windows Phone NFC и кошелек Быстрый механизм передачи данных между приложениями (без сложного установления доверительных отношений) Поддержка безопасных механизмов передачи Хранение кредиток, скидок и др. в одном месте Возможность ассоциации карты с приложением Поддержка безопасности на уровне pin
Object Model WalletTransactionItemBas e PaymentInstrument ID_CAP_WALLET_PAYMENTINSTRUM ENTS ID_CAP_WALLET WalletTransactionItem ID_CAP_WALLET Deal ID_CAP_WALLET WalletItem
Windows Phone App Item Linking Wallet Item #1 Wallet Item #2 Wallet Item #3 Wallet Item #4 Wallet Item #5 App A App B
Windows Phone Windows Phone 7.1
Windows Phone Windows Phone 8
Sockets
Proximity
HTTP Support
Windows Phone Новые устройства Разрешения – 480 x 800 – 768 x 1280 – 720 x 1280 (16:9)
Windows Phone Шаринг данных ShareMediaTask – диалог для шаринга медиа файлов в социальных сетях по выбору пользователя
Windows Phone Новые элементы управления LongListSelector
Windows Phone И еще немного… Pivot и Panorama как часть платформы Линзы Улучшения работы с загрузкой фотографий Улучшение работы с камерой Покупка в приложении DirectX
Windows Phone Вопросы совместимости Windows Phone 8 поддерживает quirks режим, который позволяет запускать старые приложения Перекомпиляция старых приложений не всегда приводит к успеху – Документация содержит информацию о том, что необходимо изменить
Windows Phone Вопросы?
Сергей Байдачный Специалист по разработке программного обеспечения Майкрософт Украина
Windows Phone Содержание С++ и Windows Phone Современный С++ Расширение С++ для Windows 8 и Windows Phone 8 Немного о DirectX
Windows Phone Две модели приложений Управляемая Использование уже существующих подходов (C#/XAML) Большое количество элементов управления Поддержка XNA Нативная Разработка приложений на С++ Переносимость некоторых библиотек и кода с Windows 8 Повышение производительности игр при утилизации DirectX
Windows Phone Две модели приложений Допускается встраивание DirectX компонент в XAML интерфейс Создание приложений на HTML 5 не поддерживается, но …
Windows Phone C++ в Windows Phone 8 Visual C Тот же С++, что и в Windows 8 Новые возможности C++11 RValue referencesForward declared enumsBidirectional fences static_assertAlignmentData-dependency ordering AutoStandard-layout and trivial typesexception_ptr Trailing return typesExtended friend declarationsThread-local storage Lambdas Local and unnamed types as template arguments __func__ DecltypeRange-based for-loopC99 preprocessor Right angle bracketsoverride and finallong extern templatesMinimal GC support nullptrAtomics Strongly typed enumsStrong compare and exchange
Windows Phone Portable Class Libraries Одинаковый код Один проект Одна сборка Множество платформ
Windows Phone Portable Class Libraries Platform-specific Portable /shareablePlatform-specific Windows Phone app Windows Store app
Windows Phone Что же можно делать на С++ Networking Proximity In-App Purchase Sensors Location File System Core app model Threading
Windows Phone C++ reimagined C++ 11 auto shared_ptr decltype C++/CX Улучшение производительности С++ разработчика на платформе Windows 8 и Windows Phone 8
Windows Phone C++ Component Extensions (C++/CX) Key BindingsFeatureSummary 1. Data Types ref classReference type value classValue type interface class Interface propertyProperty with get/set eventDelegate property with add/remove/raise delegateType-safe function pointer genericType-safe generics 2. Allocation gcnewGarbage-collected allocation ref newReference-counted allocation 3. Pointer & Reference ^Strong pointer (hat or handle) %Strong reference
Windows Phone Создание классов Windows Runtime Defining public ref class Person { public: Person(String^ name, String^ ); void Greet(Person^ other); internal: ~Person(); void SetPassword(const std::wstring& passwd); }; Using Person^ p = ref new Person(John Surname); p->Greet(ref new Person(Jim Surename);
Windows Phone Работа с памятью Handle (^) is a pointer to a Windows Runtime object for which the compiler performs automatic reference counting ref new instantiates or activates a Windows Runtime class. Person^ p; { Person^ p2 = ref new Person(); // refcount = 1 p2->Name = John; // refcount = 1 p = p2; // refcount = 2 } // refcount = 1 p = nullptr;// refcount = 0; ~Person()
Windows Phone Интерфейсы Inheriting public interface class IFeline : IAnimal { void Scratch(); }; Implementing ref class Cat : IFeline { public: virtual void Play(); virtual void Scratch(); }; Defining public interface class IAnimal { void Play(); }; Using IAnimal^ animal = ref new Cat(); animal->Play();
Windows Phone Свойства Defining – Trivial properties (with private backing store) public: property String^ Name; – User defined properties public: property Person^ Sibling { Person^ get() { InitSiblings(); return _sibling; } void set(Person^ value) { _sibling = value; NotifySibling(); } } private: Person^ _sibling; Using Person^ p = ref new Person(John); p->Sibling = ref new Person(p->Name);
Windows Phone Делегаты Declaring: like a function public delegate void PropertyChanged( String^ propName, String^ propValue ); Instantiating: like a class – From lambda: auto p = ref new PropertyChanged( [](String^ pn, String^ pv) { cout
Windows Phone События Defining – Trivial event (with private backing store) public: event PropertyChanged^ OnPropertyChanged; – User defined event public: event PropertyChanged^ OnNetworkChanged { EventRegistrationToken add(PropertyChanged^); void remove(EventRegistrationToken t); void raise(String^, String^); } Using – Subscribing person->OnPropertyChanged += propertyChangedDelegate; auto token = person- >OnPropertyChanged::add(propertyChangedDelegate); – Unsubscribing person->OnPropertyChanged -= token; person->OnPropertyChanged::remove(token);
Windows Phone Исключения Signaling an error case: throw exception – throw ref new InvalidArgumentException(); – throw ref new COMException(E_*); Handling an error case: catch exception – try { … } catch (OutOfMemoryException^ ex) { … } – Access HRESULT value via ex->HResult Notes on exceptions: – catch (Platform::Exception^) catches all WinRT exceptions – Exceptions dont carry any state and dont travel across modules – Deriving from an exception class is ill- formed HRESULTException E_OUTOFMEMO RY OutOfMemoryExcepti on E_INVALIDARG InvalidArgumentExce ption E_NOINTERFACEInvalidCastException E_POINTER NullReferenceExcepti on E_NOTIMPL NotImplementedExce ption E_ACCESSDENI ED AccessDeniedExcepti on E_FAILFailureException E_BOUNDS OutOfBoundsExcepti on E_CHANGED_ST ATE ChangedStateExcepti on REGDB_E_CLAS SNOTREG ClassNotRegisteredE xception E_DISCONNECT ED DisconnectedExcepti on E_ABORTOperationCanceledE xception
Windows Phone Обобщенные типы Implementing ref class PairStringUri: IPair { public: property String^ First; property Uri^ Second; }; Defining generic public interface class IPair { property T First; property U Second; }; Using IPair ^ uri = GetUri(); auto first = uri->First; // type is String^ auto second = uri->Second; // type is Uri^
Windows Phone Частичные типы Partial class definition private partial ref class MainPage: UserControl, IComponentConnector { public: void InitializeComponent(); void Connect() { btn1->Click += ref new EventHandler(this, &MainPage::Button_Click); } }; Class definition ref class MainPage { public: MainPage() { InitializeComponent(); } void Button_Click(Object^ sender, RoutedEventArgs^ e); };
Windows Phone Vector and ObservableVector Instantiating using namespace Platform; Vector ^ items = ref new Vector (); Adding elements items->Append(Hello); Returning a read-only view of the vector IVectorView ^ GetItems () { return items->GetView(); } Getting notification for changes items->VectorChanged += ref new VectorChangedEventHandler (this, &MyClass::VectorChanged);
Windows Phone Map and ObservableMap Defining using namespace Platform; Map favorites = ref new Map (); Adding elements favorites->Insert(MSDN, ref new Uri( Checking and removing elements if (favorites->HasKey(MSDN)) favorites->Remove(MSDN);
Windows Phone Немного о DirectX C++/DirectX – поддержка нативных приложений XNA продолжает поддерживаться Поддержка DirectX 11.1, но уровень 9.3 Возможность интеграции XAML и DirectX
Windows Phone Вопросы?