Блог Сергея Байдачного

Мой блог о технологиях

Windows Phone 8: Интеграция с экраном блокировки

with one comment

Если Вы уже исследовали настройки телефона на реальном устройстве, то могли обнаружить отдельный раздел Экран блокировки (lock screen). Тут пользователь может задать такие параметры экрана блокировки своего устройства, как:

· изображение, которое будет являться фоном для экрана блокировки;

· приложение, которое будет иметь возможность выводить на экран блокировки короткие сообщения (по умолчанию задан Календарь);

· до пяти приложений, которые смогут отображать свой статус на экране блокировки. Тут под статусом понимается иконка приложения и счетчик (например, количество не прочитанных сообщений)

Вот как выглядят настройки экрана блокировки по умолчанию:

 

image

 

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

Фон для экрана блокировки

Когда я наблюдаю за тем, как пользователь Windows Phone купив новый чехол для своего устройства тут же спешит поменять цвет плиток под цвет своего чехла, я начинаю осознавать важность различных «рюшечек», одной из которых есть возможность установки новой заставки на экран блокировки пользователя. Тут не только можно порадовать пользователя, но и заработать деньги, предоставляя коллекции красивых заставок.

Существует несколько способов установки заставки на экран пользователя, но, независимо от способа, приложение должно декларировать такую возможность в своем манифесте. Поэтому, первым делом нужно открыть манифест в режиме редактора XML и внести следующий элемент:

 

<Extensions>
    <Extension ExtensionName="LockScreen_Background" 
               ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" 
               TaskID="_default" />
</Extensions>

 

Элемент Extensions располагается сразу после элемента Tokens и не содержит никакой изменяемой информации. Иными словами его нужно просто скопировать. Но, если данный элемент отсутствует, то любые попытки установить фон экрана блокировки из кода будут вызывать исключение.

Итак, первый способ сделать Ваше приложение провайдером заставок, это понадеяться на пользователя. Если приложение декларирует расширение LockScreen_Background, то оно появляется в списке приложений, доступных при настройке фона в разделе настроек телефона «Экран блокировки». Тут пользователь может выбрать Ваше приложение и тут же открыть его.

 

image

 

Предположим пользователь выбрал Ваше приложение, но решил не открывать его, не дав Вам возможность провести инициализацию экрана блокировки своими данными. Независимо от этого, заставка на экране блокировки должна поменяться, чтобы не разочаровывать пользователя. Именно поэтому, приложение должно предоставлять изображение для экрана блокировки по умолчанию. Это файл с фиксированным именем DefaultLockScreen.jpg, который должен находиться в корневой директории пакета приложения. Не забудьте добавить этот файл в пакет!

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

 

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    if ((e.NavigationMode==NavigationMode.New)&&
        (NavigationContext.QueryString.Keys.Contains("WallpaperSettings"))&&
        (NavigationContext.QueryString["WallpaperSettings"].Equals("1")))
    {
        NavigationService.Navigate(new Uri("/Settings.xaml"));
    }

    base.OnNavigatedTo(e);
}

 

Тут нам нужно проверить, что страница действительно была только что создана, что параметр WallpaperSettings был передан и равен единице (если был передан). Если это так, то мы перенаправляем пользователя на страницу настроек, связанных с экраном блокировки, или сразу переходим к установке каких-то изображений.

Второй способ сделать Ваше приложение провайдером изображений на экран блокировки, то явно запросить разрешение на это у пользователя. Для этого следует воспользоваться пространством имен Windows.Phone.System.UserProfile, где есть два нужных нам класса, это LockScreen и LockScreenManager. С помощью LockScreenManager можно определить, является ли наше приложение провайдером изображений в данным момент времени. Для этого используется свойство IsProvidedByCurrentApplication. Если свойство возвращает значение true, то все в порядке и можно приступать к установке изображений. В противном случае, можно запросить право стать провайдером прямо из приложения. Для этого можно воспользоваться методом RequestAccessAsync. Этот метод возвращает значение перечислимого типа LockScreenRequestResult, способное принимать значение Granted или Denied. Это позволяет избежать дополнительных объяснений пользователю и не перебрасывать его на страницу настроек, а решить все на месте. При вызове метода RequestAccessAsync пользователь увидит на экране всплывающее сообщение подобного типа:

 

image

 

Наконец, когда разрешения получены и все проверки сделаны, можно установить новое изображение на экран блокировки. Для этого используется класс LockScreen из того же пространства имен. Тут используется всего два метода, это GetImageUri и SetImageUri, которые позволяют получить имя файла с текущим изображением, а также установить новое изображение. Изображение может находится как внутри пакета, так и в изолированном хранилище. В зависимости от этого при формировании Uri используйте префикс msappx:/// или msappdata:///local/ соответственно. Если изображение находится в сети, то его нужно предварительно скопировать в изолированное хранилище. При этом следите, чтобы имя файла не повторялось при копировании. В противном случае платформа решит, что изображение не поменялось и не произведет обновление.

Сообщения и статус для экрана блокировки

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

Итак, чтобы задекларировать возможность приложения отображать сообщения и статус на экране блокировки, достаточно в манифест добавить следующие расширения:

 

<Extensions>
  <Extension ExtensionName="LockScreen_Notification_IconCount" 
             ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" 
             TaskID="_default" />
  <Extension ExtensionName="LockScreen_Notification_TextField" 
             ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" 
             TaskID="_default" />
</Extensions>

 

Тут, первое расширение декларирует возможность отображать счетчик приложения, а второе – текстовое сообщение. Естественно, что можно вместо двух расширений указать только одно из них. Тут все зависит от функциональности и потребностей приложения.

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

Еще один шаг, который необходимо сделать, это предоставить иконку для отображения статуса. Это специальная иконка приложения, которая отображается рядом со счетчиком и имеет размер 38 на 38 пикселей в формате png. При этом для создания иконки можно использовать только белый цвет, размещенный на прозрачном фоне. Любая другая иконка не пройдет сертификацию. Как только иконка у Вас готова, ее необходимо описать в манифесте, используя элемент DeviceLockImageURI внутри элемента, описывающего основную плитку приложения (например, TemplateFlip):

 

<DeviceLockImageURI IsRelative="true" 
                 IsResource="false">Assets\LockImage.png
</DeviceLockImageURI>

 

Тут указывается месторасположение иконки и путь к ней.

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

Реклама

Written by Sergiy Baydachnyy

17.12.2012 в 22:12

Опубликовано в Windows Phone

Tagged with

Один ответ

Subscribe to comments with RSS.

  1. а можно исходник ? не совсем понятная статейка все как то поверхностное

    Аноним

    17.02.2015 at 07:31


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: