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