Смена фона рабочего стола и экрана блокировки из C#/XAML приложения UWP

от автора

Довольно интересной возможностью приложений 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/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *