Windows Phone 8
Download
Report
Transcript Windows Phone 8
Сергей Байдачный
Специалист по разработке
программного обеспечения
Майкрософт Украина
[email protected]
Конкурс приложений для
Windows Phone
http://wp8.promorc.com
Содержание
• «Живые» плитки в Windows Phone 8
• Интеграция с экраном блокировки
• Работа с хранилищами данных
• «Глубокие» ссылки и ассоциации с файлами
Windows Phone
Персонализация устройства
• Они все одинаковые….
Windows Phone
Flip Tile Шаблон
(TemplateFlip, FlipTileData)
small: 159x159
medium: 336x336
wide: 691x336
Windows Phone
Cycle Tile Шаблон
(TemplateCycle, CycleTileData)
small: 159x159
medium: 336x336
wide: 691x336
wide center
crops to medium
Windows Phone
Iconic Tile Шаблон
(TemplateIconic, IconicTileData)
small: 110x110
medium: 202x202
white with
transparency
only
crop tight on
horizontal
Новые типы плиток
• Демонстрация
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
Сергей Байдачный
Специалист по разработке
программного обеспечения
Майкрософт Украина
[email protected]
Содержание
• Карты и местоположение
• Распознавание голоса
• Кошелек
• Коммуникации
• И другое…..
Windows Phone
Доступные APIs
.Net APIs
Предустановленная точность
Проблемы с кешированием
Только из управляемых
приложений
Требует вызова Start и Stop
A-GPS
Wi-fi
Windows
Runtime
APIs
Windows Phone
Доступно из C# и C++
Позволяет определять положение
через интервал времени или
базируясь на перемещениях
Позволяет задать точность в метрах и
время
Позволяет задать максимальный
«возраст» данных
Cell
Определение позиции
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
110+ стран, векторные карты, 3D объекты, несколько режимов
Загружаются пользователем, MapsDownloader задача доступна
для разработчика
Удобное взаимодействие, быстрая прорисовка, поворот
Вычисляется через Maps Services
Windows Phone
Windows Phone Maps Services
Latitude,Longitude to Address
Address to Latitude,Longitude
RouteQuery, Route, RouteLeg, RouteManeuver
Windows Phone
Windows Phone Map and
Services API
Map Control &
Service
APIs
Map Toolkit
Extensions
Windows Phone
ID_CAP_MAP and
ID_CAP_LOCATION
Developer Token assigned
through Windows Phone
Developer Center
Part of Windows Phone Toolkit
MapsUserControl
PushPin
ToGeoCoordinate
.Net
Настройка приложения
• 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
Windows Phone
Object Model
WalletItem
WalletTransactionItemBas
e
PaymentInstrument
ID_CAP_WALLET_PAYMENTINSTRUM
ENTS
ID_CAP_WALLET
WalletTransactionItem
Deal
ID_CAP_WALLET
ID_CAP_WALLET
App <-> Item Linking
Wallet Item #1
App A
Wallet Item #2
Wallet Item #3
Wallet Item #4
Wallet Item #5
Windows Phone
App B
Windows Phone 7.1
Windows Phone
Windows Phone 8
Windows Phone
Sockets
Proximity
HTTP Support
Новые устройства
• Разрешения
–
–
–
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
Сергей Байдачный
Специалист по разработке
программного обеспечения
Майкрософт Украина
[email protected]
Содержание
• С++ и Windows Phone
• Современный С++
• Расширение С++ для Windows 8 и Windows
Phone 8
• Немного о DirectX
Windows Phone
Две модели приложений
Управляемая
Нативная
• Использование уже
существующих
подходов (C#/XAML)
• Разработка
приложений на С++
• Большое количество
элементов управления
• Поддержка XNA
Windows Phone
• Переносимость
некоторых библиотек и
кода с Windows 8
• Повышение
производительности
игр при утилизации
DirectX
Две модели приложений
• Допускается встраивание 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
__func__
arguments
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 Phone
Windows Store app
Что же можно делать на С++
Networking
Proximity
In-App Purchase
Sensors
Location
File System
Core app model
Threading
Windows Phone
C++ 11
auto
shared_ptr
decltype
.....
C++/CX
Улучшение
производительности
С++ разработчика на
платформе Windows 8
и Windows Phone 8
http://msdn.microsoft.com/en-us/library/hh567368.aspx
Windows Phone
Key Bindings Feature
Summary
1. Data Types ref class
Reference type
2. Allocation
3. Pointer &
Reference
Windows Phone
value class
Value type
interface
class
Interface
property
Property with get/set
event
“Delegate property” with add/remove/raise
delegate
Type-safe function pointer
generic
Type-safe generics
gcnew
Garbage-collected allocation
ref new
Reference-counted allocation
^
Strong pointer (“hat” or “handle”)
%
Strong reference
• Defining
public ref class Person {
public: Person(String^ name, String^ email);
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
Defining
public interface
class IAnimal {
void Play();
};
• Inheriting
public interface class IFeline :
IAnimal {
void Scratch();
};
Using
IAnimal^ animal =
ref new Cat();
animal->Play();
• Implementing
ref class Cat : IFeline {
public: virtual void Play();
virtual void
Scratch();
};
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 << pn << ” = “ << pv;
} );
–
From free-function
auto p = ref new PropertyChanged( UIPropertyChanged );
–
From class-member
auto p = ref new PropertyChanged( this,
MainPage::OnPropertyChanged );
•
Invoking: like a function
p( “Visible”, false );
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
HRESULT
Exception
E_OUTOFMEMO
RY
E_INVALIDARG
• 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 illformed
Windows Phone
OutOfMemoryExcepti
on
InvalidArgumentExce
ption
E_NOINTERFACE InvalidCastException
E_POINTER
E_NOTIMPL
E_ACCESSDENI
ED
E_FAIL
E_BOUNDS
NullReferenceExcepti
on
NotImplementedExce
ption
AccessDeniedExcepti
on
FailureException
OutOfBoundsExcepti
on
E_CHANGED_ST ChangedStateExcepti
ATE
on
REGDB_E_CLAS ClassNotRegisteredE
SNOTREG
xception
E_DISCONNECT DisconnectedExcepti
ED
on
E_ABORT
OperationCanceledE
xception
Defining
generic<typename T, typename U>
public interface class IPair {
property T First;
property U Second;
};
Using
IPair<String^, Uri^>^ uri = GetUri();
auto first = uri->First; // type is
String^
auto second = uri->Second; // type
is Uri^
Windows Phone
• Implementing
ref class PairStringUri:
IPair<String^, Uri^> {
public:
property String^ First;
property Uri^ Second;
};
• 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
• Instantiating
using namespace Platform;
Vector<String^>^ items = ref new Vector<String^>();
• Adding elements
items->Append(“Hello”);
• Returning a read-only view of the vector
IVectorView<String^>^ GetItems () {
return items->GetView();
}
• Getting notification for changes
items->VectorChanged += ref new VectorChangedEventHandler<String^>
(this, &MyClass::VectorChanged);
Windows Phone
• Defining
using namespace Platform;
Map<String^, Uri^> favorites = ref new Map<String^, Uri^>();
• Adding elements
favorites->Insert(“MSDN”, ref new Uri(“http://msdn.com”));
• 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
Вопросы?
Windows Phone