Post on 23-Feb-2016
description
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
Вопросы?