Смена фона рабочего стола и экрана блокировки из 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;
    
    Метки:
    Поделиться публикацией
    Комментарии 0

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