【UWP开发】自定义锁屏&桌面壁纸
mtobeiyf 2015.11.01 00:16:55字数 394阅读 1,249调用通用的API来设置桌面壁纸,可以实现很多有趣的功能。
在Windows通用平台中,可以使Windows.System.UserProfile
命名空间下的类UserProfilePersonalizationSettings
来对系统的开始界面背景和锁屏壁纸进行操作。它可以修改锁屏壁纸和桌面壁纸,调用后会返回bool值,如果成功就是true,否则返回false。
在调用UserProfilePersonalizationSettings
类前,先访问一下IsSupported
方法,看看是否支持该操作。然后通过Current属性可以获取到一个UserProfilePersonalizationSettings
实例,之后你就可以设置壁纸了。
调用TrySetLockScreenImageAsync
方法设置锁屏壁纸,调用TrySetWallpaperImageAsync
方法可以设置桌面壁纸,参数都是用来作为背景的图片文件的StorageFile
。
下面通过实例来演示一下如何实现这个功能。
因为UserProfilePersonalizationSettings
被封装在Windows.System.UserProfile
中,先引用
using Windows.System.UserProfile
设置壁纸
UserProfilePersonalizationSettings setting
= UserProfilePersonalizationSettings.Current;
//实例化对象
bool b = await setting.TrySetLockScreenImageAsync(file);
其中TrySetLockScreenImageAsync(file)
是尝试设置文件对象file
为锁屏壁纸。
在测试中,我是直接在项目根目录下添加了一个pic.jpg
的1280*720的图片文件。(其实应该放Assets里面的)
那么如何导入图片文件呢?
需要用到StorageFile
和Uri
在Class下定义:
private static Uri imgUri = new Uri("ms-appx:///pic.jpg");
这样就有个Uri指向根目录下的pic.jpg文件。
接下来要用到StorageFile来导入文件。
还是要先引用
using Windows.Storage;
从imgUri导入文件,注意要用到异步
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(imgUri);
下面贴上主要源码。
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
private static Uri imgUri = new Uri("ms-appx:///pic.jpg");
private async void button_Click(object sender, RoutedEventArgs e)
{
var msg = new MessageDialog("");
if (!UserProfilePersonalizationSettings.IsSupported())
{
var mess = new MessageDialog("人品太差,不支持哦!");
await mess.ShowAsync();
}
//获取文件
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(imgUri);
//设置背景
UserProfilePersonalizationSettings setting = UserProfilePersonalizationSettings.Current;
bool b = await setting.TrySetLockScreenImageAsync(file);
}
}
实际 返回false
C# code
----------------------------------------------
private static Uri imgUri = new Uri("ms-appx:///Assets/pic.jpg");
private async void Button_Click_1(object sender, RoutedEventArgs e)
{
var msg = new MessageDialog("");
if (!UserProfilePersonalizationSettings.IsSupported())
{
var mess = new MessageDialog("人品太差,不支持哦!");
await mess.ShowAsync();
}
img.Source = new BitmapImage(new Uri("ms-appx:///pic.jpg", UriKind.RelativeOrAbsolute));
//获取文件
StorageFile file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///pic.jpg", UriKind.RelativeOrAbsolute));
//设置背景
UserProfilePersonalizationSettings setting = UserProfilePersonalizationSettings.Current;
bool b = await setting.TrySetLockScreenImageAsync(file);
if (b)
{
msg.Content = "set ok!";
await msg.ShowAsync();
}
else
{
msg.Content = "can not set lock screen!";
await msg.ShowAsync();
}
}