Довольно интересной возможностью приложений UWP является то, что можно без особых проблем изменить фон и заставку экрана блокировки. Что странно, так это то, что даже не выдается никакого предупреждения и не требуется установка разрешений в манифесте (хотя что-нибудь вроде пункта User Account Information из Capabilities манифеста вполне могло бы и потребоваться).
Под катом описание простенького, но забавного трюка.
Как только что упоминал, смена фона не требует никаких разрешений. Достаточно добавить в приложение файл изображения (я добавил файл кота ниндзя — ninjacat.png) и использовать такой вот сниппет:
if (UserProfilePersonalizationSettings.IsSupported()) { StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///ninjacat.png")); // файл из приложения не может быть установлен в качестве заставки, поэтому копируем его в локальную папку StorageFile localFile = await file.CopyAsync(ApplicationData.Current.LocalFolder,"ninjacat.png", NameCollisionOption.ReplaceExisting); UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current; bool isSuccess = await settings.TrySetWallpaperImageAsync(localFile); }
Для использования сниппета было добавлено два пространства имен:
using Windows.System.UserProfile; using Windows.Storage;
Для установки фона мы используем класс UserProfilePersonalizationSettings, предварительно проверяя, поддерживается ли смена фона профиля. Обратите внимание, что для того, чтобы использовать изображение, необходимо было скопировать его из директории приложения в другую доступную папку (я использовал локальную папку приложения).
Для установки изображения на экран блокировки необходимо в сниппете заменить последнюю строку на:
bool isSuccess = await settings.TrySetLockScreenImageAsync(localFile);
Кстати, очевидно, что значением isSuccess в случае успеха будет true, а в случае неудачи false.
Вполне можно и подгрузить картинку из сети. В таком случае наш сниппет изменится на такой:
if (UserProfilePersonalizationSettings.IsSupported()) { StorageFile localFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("cat.png", CreationCollisionOption.ReplaceExisting); BackgroundDownloader downloader = new BackgroundDownloader(); DownloadOperation dl = downloader.CreateDownload(new Uri("http://az648995.vo.msecnd.net/win/2015/07/Windows_Insider_Ninjacat_Unicorn-1024x768-Desktop.png"), localFile); await dl.StartAsync(); UserProfilePersonalizationSettings settings = UserProfilePersonalizationSettings.Current; var isSuccess = await settings.TrySetWallpaperImageAsync(localFile); }
Но в таком случае не забудьте в манифесте приложения, в возможностях поставить галочку напротив «Интернет (клиент)» и добавить пространство имен
using Windows.Networking.BackgroundTransfer;
ссылка на оригинал статьи http://habrahabr.ru/post/271943/
Добавить комментарий