Статьи

31 день Windows 8 | День № 11: Приложения блокировки экрана

Эта статья посвящена Дню № 11 из серии под названием «  31 день Windows 8» . Каждая из статей этой серии будет опубликована как для  HTML5 / JS, так  и для  XAML / C # . Вы можете найти дополнительные ресурсы, загрузки и исходный код на нашем  сайте .

advertisementsample

Сегодня мы рассмотрим последний бит уведомлений в Windows 8: экран блокировки. Если вы используете Windows 8 на своем компьютере, вы, вероятно, довольно хорошо знакомы с экраном блокировки. Он показывает, сколько писем вы получили, сообщения Facebook, часы и ваше состояние подключения. Вот мой текущий экран блокировки:

11-XAML-LockScreen

Да, это фото моего экрана. Сегодня утром я потратил 30 минут на поиски решения сделать снимок экрана с моим экраном блокировки, но безуспешно. (Да, я знаю, что могу запустить виртуальную машину или пульт дистанционного управления на моей машине, но у меня сейчас ничего такого не настроено.) В любом случае, вы также можете видеть, что я пишу эту статью только несколько дней до времени публикации, и у меня встреча через 30 минут.

У нас, как у разработчиков, есть возможность добавлять свои значки и к этому экрану блокировки, но идти в одиночку опасно. Возьми это. Это  руководство Microsoft о лучших способах использования области уведомлений экрана блокировки .

Во-первых, нам нужно установить наш файл package.appxmanifest, чтобы разрешить уведомления экрана блокировки:

11-XAML-ApplicationUITab

Когда вы сделаете это, вы заметите, что экран загорается красными символами X. Когда уведомления на экране блокировки включены, нам необходим логотип со значком, и, поскольку мы выбрали опцию, которая также включает обновления плитки, мы также должны предоставить изображение с широким логотипом. Вот моя вкладка пользовательского интерфейса приложения с добавленными этими файлами:

11-XAML-ApplicationUITab2

Вы заметите, что у нас теперь есть новый красный крестик, который сообщает нам, что «Если включены уведомления экрана блокировки, вы должны указать одно или несколько объявлений фоновых задач типа« Таймер »,« Канал управления »или« Push-уведомление ». «»

Это означает, что приложения блокировки экрана обычно ожидают обновления от фонового агента. Давайте перейдем на нашу вкладку объявлений и добавим фоновые задачи, например:

11-XAML-декларация

Однако в моем примере приложения мы не собираемся создавать фоновую задачу. Я собираюсь осветить это завтра. Вместо этого мы собираемся сосредоточиться конкретно на процессах и коде, который позволяет нам обновлять информацию нашего экрана блокировки.

Прежде чем вы начнете думать о записи контента на экран блокировки пользователя, вам нужно запросить его разрешение. Теперь вам не нужно спрашивать, но без их разрешения дорога к экрану блокировки опасна и таит в себе опасность. Вот что я имею в виду:

Вы получаете ОДНУ, и только ОДНУ возможность, возможность спросить пользователя о разрешении находиться на его экране блокировки. Если вы спросите один раз, и они скажут «Не разрешать», вы даже не сможете спросить снова. Вот как это выглядит, когда вы спрашиваете:

11-XAML-BackgroundRequest

А вот как вы это делаете:

BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();

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

11-XAML-LockScreenSettings

BackgroundAccessStatus status = BackgroundExecutionManager.GetAccessStatus();
if ((status == BackgroundAccessStatus.AllowedWithAlwaysOnRealTimeConnectivity) ||
    (status == BackgroundAccessStatus.AllowedMayUseActiveRealTimeConnectivity))
{
   //SEND YOUR UPDATE HERE.
}

Пользователи могут выбрать до 7 приложений для отображения на своем экране блокировки. Мы хотим убедиться, что мы одни из них. Поэтому, поскольку наш статус может меняться по желанию пользователя, мы должны нести ответственность перед тем, как отправлять обновления на его экран блокировки.

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

Вот как мы проверяем, предоставил ли пользователь нам разрешение на обновление экрана блокировки:

Итак, на данный момент мы рассмотрели вопрос о предоставлении пользователю разрешения, а затем проверили, чтобы убедиться, что разрешение было предоставлено. Следующий шаг — отправка обновления.

Отправка актуального обновления будет выглядеть довольно знакомо, если вы прочитали предыдущие две статьи. ( День № 9 — Live TilesДень № 10 — Уведомления о тостах ) Как и в предыдущих примерах, мы собираем шаблон, который состоит из XML (в данном случае это невероятно просто):

<badge value="badge_value"/>

Далее нам нужно указать значение, которое мы хотим отобразить. У нас есть несколько вариантов в этом сценарии. Мы можем не только использовать любое число от 1 до 99, но у нас также есть несколько символов на выбор. Самое приятное то, что шаблон достаточно умен, чтобы распознавать разницу, поэтому единственное, что изменится в нашем коде, — это фактическое значение, которое мы передаем. Вот код для обновления значка:

XmlDocument badgeData = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeNumber);
XmlNodeList badgeXML = badgeData.GetElementsByTagName("badge");
((XmlElement)badgeXML[0]).SetAttribute("value", "31");
BadgeNotification badge = new BadgeNotification(badgeData);
BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badge);

Вы можете видеть, что в моем вызове метода SetAttribute () я передаю значение 31. В результате получается значок блокировки экрана, который выглядит следующим образом:

WP_20121106_004

Если вы предпочитаете использовать один из глифов, вот список того, что доступно,  любезно предоставлено страницей обзора Badge в MSDN .

11-XAML-GlyphList

Чтобы указать глиф, нам нужно только изменить значение в нашем методе SetAttribute (), например так:

((XmlElement)badgeXML[0]).SetAttribute("value", "Playing");

Вот и все для приложений блокировки экрана … Я надеюсь, что вы узнали что-то сегодня. Подождите … есть еще одна вещь. Я забыл упомянуть, что когда мы выбрали «Badge and Tile Text» в нашем файле appxmanifest, мы включили эти значки, которые мы создаем, для отображения на нашей Tile. (Вот почему был необходим файл WideTile.png.) Вот как выглядит мой Live Tile с тем же значком «Игра»:

11-XAML-WideLogo

Мы можем обновлять информацию нашего экрана блокировки из нашего приложения в любое время, но сложная часть заключается в получении разрешения пользователя. Как только вы это получили, обновить информацию довольно просто, как мы видели в этой статье.

Если вы хотите загрузить работающее приложение, использующее код из этой статьи, щелкните значок ниже:

downloadXAML

Завтра мы подведем итоги последних трех дней, поговорив о фоновых задачах. Мы покажем, как обновить живые плитки, уведомления о тостах и ​​данные экрана блокировки из фоновой задачи. Увидимся позже!

downloadTheTools