windows phone 8: Обзор возможностей ( часть 1)

Post on 23-Feb-2016

68 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Windows Phone 8: Обзор возможностей ( часть 1). Сергей Байдачный Специалист по разработке программного обеспечения Майкрософт Украина Sergiy.Baydachnyy@microsoft.com. Конкурс приложений для Windows Phone. http://wp8.promorc.com. Содержание. «Живые» плитки в Windows Phone 8 - PowerPoint PPT Presentation

TRANSCRIPT

Windows Phone 8: Обзор возможностей (часть 1)

Сергей БайдачныйСпециалист по разработке программного обеспечения

Майкрософт УкраинаSergiy.Baydachnyy@microsoft.com

Конкурс приложений для Windows Phone

http://wp8.promorc.com

Windows Phone

Содержание• «Живые» плитки в Windows Phone 8• Интеграция с экраном блокировки• Работа с хранилищами данных• «Глубокие» ссылки и ассоциации с

файлами

«Живые» плитки в Windows Phone 8

Windows Phone

Персонализация устройства• Они все одинаковые….

Windows Phone

Flip Tile Шаблон (TemplateFlip, FlipTileData)

medium: 336x336small: 159x159

wide: 691x336

Windows Phone

Cycle Tile Шаблон (TemplateCycle, CycleTileData)

medium: 336x336small: 159x159

wide center crops to medium

wide: 691x336

Iconic Tile Шаблон (TemplateIconic, IconicTileData)

medium: 202x202small: 110x110

white with transparency only

crop tight on horizontal

Windows Phone

Новые типы плиток• Демонстрация

Работа старых приложений

WP7.5 поддерживают маленькие иконки на WP8!

От разработчика ничего не требуется Происходит автоматическое масштабирование

Windows Phone

Работа старых приложений• Вы можете использовать Reflection для

доступа к новым классам на платформе WP 8

• http://mangopollo.codeplex.com - пример библиотеки для 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?5551234

Windows Phone

Нет приложений

Windows Phone

2+ приложения

Windows Phone

Создание ссылок• Добавление элементов в манифест

<Extensions> <Protocol Name="myprotocol" NavUriFragment="encodedLaunchUri=%s" TaskID="_default"/></Extensions>

Windows Phone

Создание ассоциации: иконки• Почта, браузер,

офис• Размеры

– Small: 33px– Medium: 69px– Large: 176px

Windows Phone

Запуск приложений через Proximity• Запуск приложения на удаленном

устройствеProximityDevice device = ProximityDevice.GetDefault();

if (device != null) { long Id = device.PublishUriMessage( new System.Uri("contoso:NewProducts")); }

Windows Phone

Вопросы?

Windows Phone 8: Обзор возможностей (часть 2)

Сергей БайдачныйСпециалист по разработке программного обеспечения

Майкрософт УкраинаSergiy.Baydachnyy@microsoft.com

Windows Phone

Содержание• Карты и местоположение• Распознавание голоса• Кошелек• Коммуникации• И другое…..

Определение местоположения

Windows Phone

Доступно из C# и C++Позволяет определять положение через интервал времени или базируясь на перемещенияхПозволяет задать точность в метрах и времяПозволяет задать максимальный «возраст» данных

.Net APIs

Windows RuntimeAPIs

Предустановленная точностьПроблемы с кешированиемТолько из управляемых приложенийТребует вызова Start и Stop

A-GPS

Wi-fi

Cell

Доступные APIs

Windows Phone

Определение позицииpublic async Task<Geocoordinate> 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<Geolocator, PositionChangedEventArgs> 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• Nokia Mapping Data

110+ стран, векторные карты, 3D объекты, несколько режимов

• Offline MapsЗагружаются пользователем, MapsDownloader задача доступна для разработчика

• Map ControlУдобное взаимодействие, быстрая прорисовка, поворот

• Отображение направленияВычисляется через Maps Services

Windows Phone

Windows Phone Maps Services

• Geocoding Latitude,Longitude to Address

• Reverse Geocoding Address to Latitude,Longitude

• RoutingRouteQuery, Route, RouteLeg, RouteManeuver

Windows Phone

Part of Windows Phone ToolkitMapsUserControlPushPinToGeoCoordinate

Map Control &ServiceAPIs

Map ToolkitExtensions

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:<defaultTask Name="_default" NavigationPage="MainPage.xaml" >

    <BackgroundExecution>

      <ExecutionType Name="LocationTracking" />

    </BackgroundExecution >

</defaultTask>

Windows Phone

Ограничения

• Только в XAML приложениях

• Только одно приложение может быть запущено

• Ограничения по доступу к ресурсам

Windows Phone

Использование ресурсов• CPU затраты на уровне10%• Доступ к

Location Audio\Speech Network Storage Sensors

• Нет доступа к камере и микрофону• ShellToast и ShellTile.Update

Windows Phone

Контроль со стороны пользователя• ID_CAP_LOCATION

• Пользователь может закрыть приложение

• Пользователь может запретить функциональность для приложения

Windows Phone

Деактивация• Приложение работает в фоне пока:

• Приложение отслеживает местоположение• Пользователь не запретил Location Services• Не прошло 4 часа без перехода из фона• Battery Saver не включена• Другое приложение не переходит в фон• Достаточно памяти

• Предоставляется информация о причине деактивации

• Нотифицируйте пользователя

Распознавание голоса

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

WalletTransactionItemBase

PaymentInstrumentID_CAP_WALLET_PAYMENTINSTRUMENTSID_CAP_WALLET

WalletTransactionItemID_CAP_WALLET

DealID_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

.SocketsTCP/UDP, No

Listening

.WebRequest

HTTP

.WebClientHTTP

Wrapper, Not Awaitable

System.Net

Windows Phone 7.1

Windows Phone

IXMLHTTPRequest2 (IXHWR)

.SocketsTCP/UDP

.ProximityNFC,

Bluetooth

Windows.Networking

WinsockTCP/UDP

Native

.SocketsTCP/UDP

.WebRequest

HTTP

.WebClientHTTP

Wrapper, Not Awaitable

System.Net

Windows Phone 8

Sockets

• Managed Sockets – System.Net.Sockets• TCP & UDP- Socket, Multicast, Listen

• Winsock - winsock2.h, ws2tcpip.h, ….• Winsock API Family; SOCK_STREAM, SOCK_DGRAM

• WinRT – Windows.Networking.Sockets• TCP- StreamSocket• UDP- DatagramSocket

Proximity

• Near Field Communication (NFC)• Short range (2-4cm) protocol, low bandwidth (~424 kbit/s)• Acquire connections and exchange small amount of data, bootstrap

WinRT StreamSocket• Allows App->App and App->Device connectivity

• Bluetooth• 0-100m range• WinRT StreamSocket for communication (~2.1 Mbit/s)• Allows App->App and App->Device connectivity

HTTP Support

WP8• HTTPWebRequest • WebClient

• IXMLHTTPRequest2

Win8• HTTPWebRequest • HTTPClient

• IXMLHTTPRequest2

Platform

Managed Native

И другое…

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

Вопросы?

C++ при разработке Windows Phone 8

приложенийСергей Байдачный

Специалист по разработке программного обеспечения

Майкрософт УкраинаSergiy.Baydachnyy@microsoft.com

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++ 2012• Тот же С++, что и в Windows 8• Новые возможности C++11

RValue references Forward declared enums Bidirectional fences

static_assert Alignment Data-dependency ordering

Auto Standard-layout and trivial types exception_ptr

Trailing return types Extended friend declarations Thread-local storage

Lambdas Local and unnamed types as template arguments __func__

Decltype Range-based for-loop C99 preprocessor

Right angle brackets override and final long long

extern templates Minimal GC support

nullptr Atomics

Strongly typed enums Strong compare and exchange

Windows Phone

Portable Class Libraries• Одинаковый код• Один проект• Одна сборка• Множество платформ

Windows Phone

Portable Class Libraries

Platform-specific

Portable /shareable

Platform-specific

Windows Phone app Windows Store app

Windows Phone

Что же можно делать на С++

NetworkingProximityIn-App PurchaseSensorsLocationFile SystemCore app modelThreading

Windows Phone

C++ reimaginedC++ 11

autoshared_ptrdecltype. . . . .http://msdn.microsoft.com/en-us/library/hh567368.aspx

C++/CX

Улучшение производительности С++ разработчика на платформе Windows 8 и Windows Phone 8

Windows Phone

C++ Component Extensions (C++/CX)Key Bindings Feature Summary1. Data Types

ref class Reference typevalue class Value typeinterface class Interface

property Property with get/set

event “Delegate property” with add/remove/raise

delegate Type-safe function pointergeneric Type-safe generics

2. Allocation gcnew Garbage-collected allocationref new Reference-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^ email); void Greet(Person^ other); internal: ~Person(); void SetPassword(const std::wstring& passwd);};

• UsingPerson^ 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 = 1p = nullptr; // refcount = 0; ~Person()

Windows Phone

Интерфейсы• Inheriting

public interface class IFeline : IAnimal { void Scratch();};

• Implementingref class Cat : IFeline { public: virtual void Play(); virtual void Scratch();};

Definingpublic interface class IAnimal { void Play();};

UsingIAnimal^ animal = ref new Cat();animal->Play();

Windows Phone

Свойства• Defining

– Trivial properties (with private backing store)public: property String^ Name;

– User defined propertiespublic: property Person^ Sibling { Person^ get() { InitSiblings(); return _sibling; } void set(Person^ value) { _sibling = value; NotifySibling(); } }private: Person^ _sibling;

• UsingPerson^ 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 << pn << ” = “ << pv; } );

– From free-functionauto p = ref new PropertyChanged( UIPropertyChanged );

– From class-memberauto p = ref new PropertyChanged( this, MainPage::OnPropertyChanged );

• Invoking: like a functionp( “Visible”, false );

Windows Phone

События• Defining

– Trivial event (with private backing store)public: event PropertyChanged^ OnPropertyChanged;

– User defined eventpublic: 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);

– Unsubscribingperson->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 don’t carry any state and don’t

travel across modules– Deriving from an exception class is ill-

formed

HRESULT ExceptionE_OUTOFMEMORY

OutOfMemoryException

E_INVALIDARG InvalidArgumentException

E_NOINTERFACE InvalidCastException

E_POINTER NullReferenceException

E_NOTIMPL NotImplementedException

E_ACCESSDENIED

AccessDeniedException

E_FAIL FailureExceptionE_BOUNDS OutOfBoundsExcep

tionE_CHANGED_STATE

ChangedStateException

REGDB_E_CLASSNOTREG

ClassNotRegisteredException

E_DISCONNECTED

DisconnectedException

E_ABORT OperationCanceledException

Windows Phone

Обобщенные типы• Implementing

ref class PairStringUri: IPair<String^, Uri^> {public:

property String^ First;

property Uri^ Second;};

Defininggeneric<typename T, typename U> public interface class IPair {

property T First;property U Second;

};

UsingIPair<String^, Uri^>^ 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 definitionref class MainPage{public: MainPage() { InitializeComponent(); } void Button_Click(Object^ sender, RoutedEventArgs^ e);};

Windows Phone

Vector and ObservableVector• Instantiating

using namespace Platform;Vector<String^>^ items = ref new Vector<String^>();

• Adding elementsitems->Append(“Hello”);

• Returning a read-only view of the vectorIVectorView<String^>^ GetItems () { return items->GetView();}

• Getting notification for changesitems->VectorChanged += ref new VectorChangedEventHandler<String^> (this, &MyClass::VectorChanged);

Windows Phone

Map and ObservableMap• Defining

using namespace Platform;Map<String^, Uri^> favorites = ref new Map<String^, Uri^>();

• Adding elementsfavorites->Insert(“MSDN”, ref new Uri(“http://msdn.com”));

• Checking and removing elementsif (favorites->HasKey(“MSDN”)) favorites->Remove(“MSDN”);

Windows Phone

Немного о DirectX• C++/DirectX – поддержка нативных

приложений• XNA продолжает поддерживаться• Поддержка DirectX 11.1, но уровень 9.3• Возможность интеграции XAML и DirectX

Windows Phone

Вопросы?

top related