Опубликован: 15.05.2013 | Доступ: свободный | Студентов: 265 / 9 | Длительность: 24:25:00
Специальности: Системный архитектор
Лекция 4:

Плитки, уведомления, экран блокировки и фоновые задачи

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >

Плитки, дополнительные плитки и индикаторы событий

Первое. что вам следует знать о плитке вашего приложения, это то, что если вы хотите использовать широкую прямоугольную динамическую плитку (включая и дополнительные плитку), вы должны включить широкий значок (wide logo) в раздел Интерфейс приложения (Application UI) вашего манифеста, как показано ниже. Без этого вы сможете использовать квадратные динамические плитки, но обновления для прямоугольных плиток будут проигнорированы.


Сейчас я предлагаю вам обратиться к Главе 3 курса "Введение в разработку приложений для Windows 8 с использованием HTML, CSS и JavaScript" и просмотреть раздел "Основы брендинга приложений: экран-заставка и другие визуальные элементы", где говорится о том, как различные данные манифеста влияют на плитки, например, параметры Краткое имя (Short Name) и Показывать имя (Show Name). В данном разделе так же говорится о том, что нужно помнить о необходимости предоставления значков, рассчитанных на различное масштабирование разрешения.. Даже если вы запустите обновление плиток как только будет открыто ваше приложение, статические плитки будут важны для оказания первого впечатления на пользователя, сразу после того, как приложение будет установлено из Магазина Windows. Статические плитки так же нужны, так как именно их будет видеть пользователь, если отключит обновление вашей динамической плитки или у всех обновлений на вашей плитке истечет срок актуальности. Таким образом, даже если вы планируете использовать динамические плитки, не забудьте позаботиться о качественном дизайне статических плиток.

Использование квадратных и прямоугольных статических плиток позволяет вам отправлять обновления динамических плиток и на те и на другие, в том числе – на квадратные и прямоугольные дополнительные плитки. В обоих случаях, постарайтесь подумать о том, что пользователю особенно хотелось бы видеть на плитках. Когда пользователи выбирают прямоугольную широкую плитку, они хотят, чтобы ваша плитка занимала больше места на Начальном экране, очевидно, что они желают видеть некоторые подробности, которые добавляют ценности данным на Начальном экране. Если пользователи выбирают, с другой стороны, квадратную плитку, они, возможно, больше заинтересованы лишь в самых необходимых сведениях: в сведениях о количестве новых сообщений электронной почты (что выводится с помощью индикатора событий), например, вместо первых строк из этих сообщений, или о текущей температуре в выбранном месте вместо расширенного прогноза погоды

"Руководство и контрольный список для плиток и индикаторов событий" (http://msdn.microsoft.com/library/windows/apps/hh465403.aspx ) содержит довольно обширное руководство по этим темам вместе с рекомендациями по использованию зрачков, названий, индикаторов событий и обновлений. Вот полезный материал в блоге разработчиков Windows: "Эффективное использование плиток" (http://blogs.msdn.com/b/windowsappdev_ru/archive/2012/04/20/10296004.aspx ). Здесь можно узнать о том, как обновления и индикаторы событий отправляются на плитку, в этот процесс включено то, что называется XML-шаблоном плитки, предопределенная XML-конфигурация, которую вы заполняете текстом, изображениями, задаете другие свойства. Эти шаблоны применимы ко всем формам плиток и методам обновления, которые мы скоро рассмотрим. Для начала, однако, посмотрим, как управлять дополнительными плитками, так как все, о чем мы будем говорить после этого, в равной степени применимо ко всем плиткам приложения.

Примечание API для работы с плитками и уведомления обычно распложены в Windows.UI.Notifications, за исключением тех из них, которые используются для создания вторичных плиток и находятся в Windows.UI.StartScreen. Если не указано иное, предполагается, что API, о которых мы говорим, находятся именно в пространстве имен Windows.UI.Notifications. Таким образом, мы не будем всякий раз указывать его.

Дополнительные плитки

Дополнительные (вспомогательные) плитки напоминают закладки для приложения, для достижения того, что еще называется глубоким связыванием (deep linking): способом запуска приложения в определенном состоянии или с открытием конкретной страницы. Дополнительные плитки позволяют пользователю персонализировать свой Начальный экран с помощью конкретных представлений приложения. Как отмечено в материале "Руководство и контрольный список для вспомогательных плиток" (http://msdn.microsoft.com/library/windows/apps/hh465398.aspx ) (я настоятельно рекомендую почитать этот материал), предоставление возможности создания дополнительных плиток – это хорошая идея, когда у вас есть состояния приложения, которые могут быть полезной целью или пунктом назначения при его запуске. Не создавайте, однако, дополнительные плитки, для статического содержимого или для использования их как виртуальных командных кнопок – это лишь научит ваших пользователей тому, что им не следует беспокоиться о том, чтобы закреплять на Начальном экране плитки из вашего приложения.

Приложение создает дополнительную плитку в ответ на команду Закрепить (Pin), которая обычно включается в его панель приложения (с использованием значка WinJS.UI.AppBarIcon.pin). Предложите эту команду, когда приложение отображает содержимое, которое имеет смысл закрепить на Начальном экране, или если пользователь сделал соответствующее выделение. Скрывайте или отключайте команду, если содержимое или выделения не подходят для закрепления. Вдобавок, меняйте ее на команду Открепить (Unpin), если содержимое уже закреплено. Для того, чтобы узнать подробности об управлении командами панели приложения, обратитесь к Главе 1 курса "Пользовательский интерфейс приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript".

Когда активирована команда Закрепить (Pin), приложение делает запрос на создание плитки. Затем Windows запрашивает согласие пользователя, как показано ранее на рис. 4.5.

Будучи созданной, дополнительная плитка имеет те же возможности, что и основная плитка приложения, включая возможность принимать обновления из любых источников. Ключевое отличие между плиткой приложения и дополнительной плиткой заключается в том, первые запускают приложение в состоянии по умолчанию (или в текущем состоянии), в то время как последние запускают приложение со специфическими аргументами, которые использует обработчик активации для запуска (или активации) приложения в каком-то конкретном состоянии. Давайте посмотрим, как это работает.

Создание дополнительных плиток

Процесс создания дополнительной плитки в ответ на команду закрепления довольно прост: сначала создается экземпляр объекта Windows.UI.StartScreen.SecondaryTile ( http://msdn.microsoft.com/library/windows/apps/windows.ui.startscreen.secondarytile.aspx) с необходимыми свойствами, затем вызывается либо его метод requestCreateAsync , либо метод requestCreateForSelectionAsync. Если пользователь подтвердил создание плитки, она будет добавлена на Начальный экран и обработчик завершения получит аргумент с результатом операции true. Если пользователь закрыл всплывающее окно (прикоснувшись к экрану за его пределами), обработчик завершения будет вызван с результатом false. Обработчик ошибки для этих методов будет вызван, если возникнет исключение, например, если вы не предоставите необходимые свойства для SecondaryTile.

Создавая объект SecondaryTile, вы можете использовать четыре разных конструктора:

  • SecondaryTile() Создает SecondaryTile со свойствами по умолчанию.
  • SecondaryTile(tileId) Инициализирует SecondaryTile заданным ID, что обычно используется когда объект создается перед обновлением или при откреплении плитки.
  • SecondaryTile(tileId, shortName, displayName, arguments, tileOptions, logo) Создает SecondaryTile со всеми свойствами, необходимыми для квадратной плитки.
  • SecondaryTile(tileId, shortName, displayName, arguments, tileOptions, logo, wideLogo) Создает SecondaryTile со всеми необходимыми свойствами для широкой прямоугольной плитки.

Эти опции очевидным образом соотносятся со следующими свойствами объекта SecondaryTile, каждое из которых необходимо, когда вы вызываете метод requestCreate*, (за исключением опции wideLogo, которая нужна только при создании прямоугольной плитки):

  • tileId Уникальная строка (максимум 64 алфавитно-цифровых знаков, включая "." и "_"), которая идентифицирует плитку в пакете приложения. Вам это понадобится, когда вы захотите обновить или удалить плитку, и это свойство всегда должно быть установлено. Это значение обычно из содержимого, связанного с плиткой. Если вы создаете дополнительные плитки с tileId, которое уже существует, новая плитка займет место старой.
  • shortName Текстовая строка (максимум – 40 символов), которая инициализирует содержимое имени плитки, как показано на рис. 4.5. Оно отображается непосредственно на плитке, но может быть изменено пользователем до создания плитки. Когда плитка создана, это значение содержит строку, которая на ней отображается.
  • displayName Отображаемое имя плитки, которое будет показано в всплывающей подсказке к плитке, напротив приложения в списке Начального экрана Все плитки (All Tiles) и в некоторых других местах в Windows. Оно может быть любой необходимой длины и может содержать любые символы.
  • arguments Строка, которая передается обработчику активации приложения при активации дополнительной плитки.
  • tileOptions Одно или большее количество значений из перечисления TileOptions (http://msdn.microsoft.com/library/windows/apps/windows.ui.startscreen.tileoptions.aspx ), которые могут быть скомбинированы с помощью оператора | (побитовое OR). Опции включают в себя следующие значения: none (по умолчанию), showNameOnLogo (отображать shortName на квадратной плитке), showNameOnWideLogo (отображать shortName на прямоугольной плитке), и copyOnDeployment (показывает, что дополнительная плитка должна перемещаться в облако и копироваться на другие устройства, когда текущий пользователь устанавливает приложение, которому принадлежит плитка).
  • logo URI для изображения квадратной плитки. Здесь можно использовать локальную схему ms-appx:/// или ms-appdata:///. Помните о том, что не следует хранить динамически создаваемое изображение во временном хранилище и постарайтесь не удалить его до тех пор, пока существует плитка, ссылающаяся на это изображение.
  • wideLogo URI для изображения прямоугольной плитки, опять же, здесь можно использовать локальные схемы ms-appx:/// и ms-appdata:///.

Вы можете, конечно, модифицировать любое из этих свойств после создания объекта SecondaryTile вместе с другими свойствами, которые позволяют вам переопределять значения по умолчанию, заданные в манифесте приложения: backgroundColor (значение типа Windows.UI.Color (http://msdn.microsoft.com/library/windows/apps/windows.ui.color.aspx )), foregroundText (значение ForegroundText (http://msdn.microsoft.com/library/windows/apps/windows.ui.color.aspx ), либо dark, либо light), и smallLogo (снова, URI с локальной схемой ms-appx:/// или ms-appdata:///). Два других свойства, lockScreenBadgeLogo и lockScreenDisplayBadgeAndTileText, связаны с дополнительной плиткой на экране блокировки. Мы вернемся к этому позже в разделе "Фоновые задачи и приложения экрана блокировки", в частности, в подразделе "Задачи, зависимые от экрана блокировки и триггеры"

Во время выполнения программы, если нужно, вы так же можете получить любые из этих свойств для проверки состояния дополнительной плитки. Если вы измените любое свойство объекта SecondaryTile, который уже закреплен, не забудьте вызвать его метод udpateAsync( http://msdn.microsoft.com/library/windows/apps/windows.ui.startscreen.secondarytile.updateasync.aspx) для применения этих изменений

Методы requestCreate* так же имеют пару вариантов, которые позволяют вам управлять расположением всплывающего окна для получения подтверждения пользователя (рис. 4.5). Сам по себе вызов requestCreateAsync приводит к размещению по умолчанию, в нижнем углу экрана. Однако, обычно лучше, чтобы это всплывающее окно появилось поближе к элементу управления команды, которая вызвала его. Для этой цели requestCreateAsync принимает необязательный параметр Windows.Foundation.Point, задающий место расположения нижнего правого угла всплывающего элемента.

У requestCreateForSelectionAsync так же есть два варианта. Первый принимает Windows.Foundation.Rect, который описывает прямоугольник выделения. Если возможно, то всплывающий элемент появится выше этого прямоугольника. Если вы предполагаете, что при таком размещении будет перекрыто содержимое для дополнительной плитки, вы так же можете передать необязательное значение из перечисления Windows.Popup.Placement ( http://msdn.microsoft.com/library/windows/apps/windows.ui.popups.placement.aspx), которое показывает, где, по отношению к этому прямоугольнику, должен появиться всплывающий элемент: выше (above), ниже (below), слева (left), и справа (right).

Вы можете поэкспериментировать со всеми этими опциями в примере "Дополнительные плитки" (http://code.msdn.microsoft.com/windowsapps/Secondary-Tiles-Sample-edf2a178 ). Сценарии 1 и 2 демонстрируют закрепление и открепление плитки с использование кнопок, расположенных на полотне приложения, соответственно. Сценарий 7 делает то же самое с помощью кнопок на панели приложения. Мы увидим некоторые другие сценарии в следующих разделов. В данный момент функция закрепления в Сценарии 1 (js/pintile.js) демонстрирует процесс создания плитки с использованием requestCreateForSelectionAsync:

function pinSecondaryTile() {
var Scenario1TileId = "SecondaryTile.Logo";
var uriLogo = new Windows.Foundation.Uri(
"ms-appx:///images/SecondaryTileDefault-sdk.png");
var uriSmallLogo = new Windows.Foundation.Uri(
"ms-appx:///images/smallLogoSecondaryTile-sdk.png");

// Создание аргументов активации...
var currentTime = new Date();
var newTileActivationArguments = Scenario1TileId + " WasPinnedAt=" + currentTime;

var tile = new Windows.UI.StartScreen.SecondaryTile(Scenario1TileId,
"Title text shown on the tile",
"Name of the tile the user sees when searching for the tile",
newTileActivationArguments,
Windows.UI.StartScreen.TileOptions.showNameOnLogo, uriLogo);

// Установка других параметров
tile.foregroundText = Windows.UI.StartScreen.ForegroundText.dark;
tile.smallLogo = uriSmallLogo;

var selectionRect = document.getElementById("pinButton").getBoundingClientRect();

tile.requestCreateForSelectionAsync(
{ x: selectionRect.left, y: selectionRect.top, width: selectionRect.width,
height: selectionRect.height },
Windows.UI.Popups.Placement.below)
.done(function (isCreated) {
if (isCreated) {
// Плитка была успешно создана
} else {
// Плитка не была создана
}
});
}
    

Примечание. Как упомянуто в Главе 1 курса "Пользовательский интерфейс приложений для Windows 8, созданных с использованием HTML, CSS и JavaScript", показ системного всплывающего элемента при создании дополнительной плитки (и при удалении, смотрите "Управление дополнительными плитками" ниже), приводит к потере фокуса приложением и к автоматическому закрытию панели приложения, не находящейся в режиме залипания. По этой причине Сценарий 7 примера о дополнительных плитках поддерживает панель приложения видимой, устанавливая ее свойство sticky в значение true перед вызовом API для работы с дополнительными плитками.

< Лекция 3 || Лекция 4: 1234 || Лекция 5 >