重新想象 Windows 8 Store Apps (59) - 锁屏
2013-09-12 08:42
344 查看
[源码下载]
[align=center]重新想象 Windows 8 Store Apps (59) - 锁屏[/align]
作者:webabcd
介绍
重新想象 Windows 8 Store Apps 之 锁屏
登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
发送徽章或文本到锁屏
将一个 app 的多个 tile 绑定到锁屏
自定义锁屏图片
示例
1、演示如何登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
LockScreen/AccessLockScreen.xaml
LockScreen/AccessLockScreen.xaml.cs
2、演示如何发送徽章或文本到锁屏
LockScreen/SendNotification.xaml
LockScreen/SendNotification.xaml.cs
3、演示如何将一个 app 的多个 tile 绑定到锁屏
LockScreen/MultipleTiles.xaml
LockScreen/MultipleTiles.xaml.cs
4、演示如何自定义锁屏图片
LockScreen/CustomLockScreenImage.xaml
LockScreen/CustomLockScreenImage.xaml.cs
OK
[源码下载]
[align=center]重新想象 Windows 8 Store Apps (59) - 锁屏[/align]
作者:webabcd
介绍
重新想象 Windows 8 Store Apps 之 锁屏
登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
发送徽章或文本到锁屏
将一个 app 的多个 tile 绑定到锁屏
自定义锁屏图片
示例
1、演示如何登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
LockScreen/AccessLockScreen.xaml
<Page x:Class="XamlDemo.LockScreen.AccessLockScreen" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.LockScreen" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <TextBlock Name="lblMsg" FontSize="14.667" /> <Button Name="btnRequestAccess" Content="请求登录锁屏" Margin="0 10 0 0" Click="btnRequestAccess_Click" /> <Button Name="btnGetAccessStatus" Content="获取当前程序的锁屏权限" Margin="0 10 0 0" Click="btnGetAccessStatus_Click" /> <Button Name="btnRemoveAccess" Content="从锁屏中移除" Margin="0 10 0 0" Click="btnRemoveAccess_Click" /> </StackPanel> </Grid> </Page>
LockScreen/AccessLockScreen.xaml.cs
/* * 演示如何登录锁屏,获取当前程序的锁屏权限,从锁屏中移除 * * 注: * 要想请求锁屏权限,需要后台任务支持“推送通知”或“控制通道” */ using System; using Windows.ApplicationModel.Background; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace XamlDemo.LockScreen { public sealed partial class AccessLockScreen : Page { public AccessLockScreen() { this.InitializeComponent(); } private async void btnRequestAccess_Click(object sender, RoutedEventArgs e) { try { // 向系统请求登录锁屏,会弹出确认对话框 // 需要后台任务支持“推送通知”或“控制通道”,否则会抛出异常 // 不能在模拟器中运行 // 如果 BackgroundAccessStatus 不等于 Unspecified,则即使调用 RequestAccessAsync() 也不会出现对话框,需要用户去“设置”中去添加或移除锁屏应用 BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync(); /* * BackgroundAccessStatus - 当前 app 的锁屏权限 * Unspecified - 用户尚未选择 * Denied - 被用户拒绝 * AllowedWithAlwaysOnRealTimeConnectivity - 用于允许了,且支持实时连接,即使电量低 * AllowedMayUseActiveRealTimeConnectivity - 用于允许了,且支持实时连接,但是如果电量低则无法实时连接 */ lblMsg.Text = "RequestAccessAsync(): " + status.ToString(); } catch (Exception ex) { lblMsg.Text = ex.ToString(); } } private void btnGetAccessStatus_Click(object sender, RoutedEventArgs e) { try { // 获取当前应用程序的锁屏权限 BackgroundAccessStatus status = BackgroundExecutionManager.GetAccessStatus(); lblMsg.Text = "GetAccessStatus(): " + status.ToString(); } catch (Exception ex) { lblMsg.Text = ex.ToString(); } } private void btnRemoveAccess_Click(object sender, RoutedEventArgs e) { try { // 将当前应用程序从锁屏中移除 BackgroundExecutionManager.RemoveAccess(); lblMsg.Text = "RemoveAccess()"; } catch (Exception ex) { lblMsg.Text = ex.ToString(); } } } }
2、演示如何发送徽章或文本到锁屏
LockScreen/SendNotification.xaml
<Page x:Class="XamlDemo.LockScreen.SendNotification" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.LockScreen" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <Button Name="btnSendBadge" Content="send badage to lock screen" Click="btnSendBadge_Click" /> <Button Name="btnSendTile" Content="send tile text to lock screen" Margin="0 10 0 0" Click="btnSendTile_Click" /> </StackPanel> </Grid> </Page>
LockScreen/SendNotification.xaml.cs
/* * 演示如何发送徽章或文本到锁屏 * * 注: * 如果需要发送文本到锁屏,需要手动在“设置”中将 app 添加到“选择要显示详细状态的应用”中 * * 另: * 关于 tile 和 badge 请参见:XamlDemo/Tile */ using NotificationsExtensions.BadgeContent; using NotificationsExtensions.TileContent; using Windows.UI.Notifications; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace XamlDemo.LockScreen { public sealed partial class SendNotification : Page { public SendNotification() { this.InitializeComponent(); } private void btnSendBadge_Click(object sender, RoutedEventArgs e) { // 发送 badge 到锁屏 BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(3); BadgeNotification badge = badgeContent.CreateNotification(); BadgeUpdater badgeUpdater = BadgeUpdateManager.CreateBadgeUpdaterForApplication(); badgeUpdater.Update(badge); } private void btnSendTile_Click(object sender, RoutedEventArgs e) { // 发送文本到锁屏,前提是此 app 在“选择要显示详细状态的应用”中 ITileWideSmallImageAndText03 tileContent = TileContentFactory.CreateTileWideSmallImageAndText03(); tileContent.TextBodyWrap.Text = "hello webabcd"; tileContent.Image.Src = "ms-appx:///Assets/Logo.png"; tileContent.RequireSquareContent = false; TileUpdateManager.CreateTileUpdaterForApplication().Update(tileContent.CreateNotification()); } } }
3、演示如何将一个 app 的多个 tile 绑定到锁屏
LockScreen/MultipleTiles.xaml
<Page x:Class="XamlDemo.LockScreen.MultipleTiles" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.LockScreen" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <Button Name="btnOnlyBadge" Content="只能发送 badge 的可以绑定到锁屏的 SecondaryTile" Click="btnOnlyBadge_Click" /> <Button Name="btnBadgeAndText" Content="既能发送 badge 又能发送 text 的可以绑定到锁屏的 SecondaryTile" Margin="0 10 0 0" Click="btnBadgeAndText_Click" /> </StackPanel> </Grid> </Page>
LockScreen/MultipleTiles.xaml.cs
/* * 演示如何将一个 app 的多个 tile 绑定到锁屏 * * 要想将 SecondaryTile 绑定到锁屏,需要注意: * 1、需要设置 SecondaryTile 的 LockScreenBadgeLogo * 2、如果需要文本支持则还需要设置 SecondaryTile 的 LockScreenDisplayBadgeAndTileText 为 true * 3、需要手动在“设置”中将 SecondaryTile 添加到锁屏,当然如果需要文本支持则需要手动将 app 添加到“选择要显示详细状态的应用”中 */ using NotificationsExtensions.BadgeContent; using NotificationsExtensions.TileContent; using System; using Windows.UI.Notifications; using Windows.UI.Popups; using Windows.UI.StartScreen; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using XamlDemo.Common; namespace XamlDemo.LockScreen { public sealed partial class MultipleTiles : Page { private string _tile1Id = "123"; private string _tile2Id = "456"; public MultipleTiles() { this.InitializeComponent(); } // 仅支持 badge 的可以登录锁屏的 SecondaryTile private async void btnOnlyBadge_Click(object sender, RoutedEventArgs e) { SecondaryTile secondTile = new SecondaryTile( _tile1Id, "testOnlyBadge", "testOnlyBadge", "argument1", TileOptions.ShowNameOnLogo, new Uri("ms-appx:///Assets/Logo.png") ); // 需要指定 LockScreenBadgeLogo secondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/BadgeLogo.png"); bool isPinned = await secondTile.RequestCreateForSelectionAsync(Helper.GetElementRect((FrameworkElement)sender), Placement.Above); if (isPinned) { BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(2); BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(_tile1Id).Update(badgeContent.CreateNotification()); } } // 即支持徽章又支持文本的可以登录锁屏的 SecondaryTile private async void btnBadgeAndText_Click(object sender, RoutedEventArgs e) { SecondaryTile secondTile = new SecondaryTile( _tile2Id, "testBadgeAndText", "testBadgeAndText", "argument2", TileOptions.ShowNameOnLogo | TileOptions.ShowNameOnWideLogo, new Uri("ms-appx:///Assets/Logo.png"), new Uri("ms-appx:///Assets/WideLogo.png") ); // 需要指定 LockScreenBadgeLogo secondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/BadgeLogo.png"); // 需要设置 LockScreenDisplayBadgeAndTileText 为 true secondTile.LockScreenDisplayBadgeAndTileText = true; bool isPinned = await secondTile.RequestCreateForSelectionAsync(Helper.GetElementRect((FrameworkElement)sender), Placement.Above); if (isPinned) { ITileWideText03 tileContent = TileContentFactory.CreateTileWideText03(); tileContent.TextHeadingWrap.Text = "hello webabcd"; tileContent.RequireSquareContent = false; TileUpdateManager.CreateTileUpdaterForSecondaryTile(_tile2Id).Update(tileContent.CreateNotification()); } } } }
4、演示如何自定义锁屏图片
LockScreen/CustomLockScreenImage.xaml
<Page x:Class="XamlDemo.LockScreen.CustomLockScreenImage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.LockScreen" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <Button Name="btnDemo" Content="自定义锁屏图片" Click="btnDemo_Click" /> <Image Name="img" Width="200" Height="200" Margin="0 10 0 0" HorizontalAlignment="Left" /> </StackPanel> </Grid> </Page>
LockScreen/CustomLockScreenImage.xaml.cs
/* * 演示如何自定义锁屏图片 */ using System; using Windows.Storage; using Windows.Storage.Pickers; using Windows.Storage.Streams; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; using Windows.UI.Xaml.Media.Imaging; using XamlDemo.Common; namespace XamlDemo.LockScreen { public sealed partial class CustomLockScreenImage : Page { public CustomLockScreenImage() { this.InitializeComponent(); } private async void btnDemo_Click(object sender, RoutedEventArgs e) { if (Helper.EnsureUnsnapped()) { FileOpenPicker imagePicker = new FileOpenPicker { ViewMode = PickerViewMode.Thumbnail, SuggestedStartLocation = PickerLocationId.PicturesLibrary, FileTypeFilter = { ".jpg", ".jpeg", ".png", ".bmp" } }; StorageFile imageFile = await imagePicker.PickSingleFileAsync(); if (imageFile != null) { // 将指定的图片设置为锁屏图片 await Windows.System.UserProfile.LockScreen.SetImageFileAsync(imageFile); // 获取当前的锁屏图片 IRandomAccessStream imageStream = Windows.System.UserProfile.LockScreen.GetImageStream(); if (imageStream != null) { BitmapImage lockScreenImage = new BitmapImage(); lockScreenImage.SetSource(imageStream); img.Source = lockScreenImage; } } } } } }
OK
[源码下载]
相关文章推荐
- 重新想象 Windows 8 Store Apps (59) - 锁屏
- 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解
- 重新想象 Windows 8 Store Apps (65) - 后台任务: 音乐的后台播放和控制
- 重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试
- 重新想象 Windows 8 Store Apps (1) - 控件之文本控件: TextBlock, TextBox, PasswordBox, RichEditBox, RichTextBlock, RichTextBlockOverflow
- 重新想象 Windows 8.1 Store Apps (79) - 控件增强: MediaElement, Frame
- 重新想象 Windows 8 Store Apps (42) - 多线程之线程池: 延迟执行, 周期执行, 在线程池中找一个线程去执行指定的方法
- 重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表
- 重新想象 Windows 8 Store Apps (10) - 控件之 ScrollViewer 特性: Chaining, Rail, Inertia, Snap, Zoom
- 重新想象 Windows 8.1 Store Apps (91) - 后台任务的新特性: 下载和上传的新特性, 程序启动前预下载网络资源, 后台任务的其它新特性
- 重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示
- 重新想象 Windows 8 Store Apps (12) - 控件之 GridView 特性: 拖动项, 项尺寸可变, 分组显示
- 重新想象 Windows 8 Store Apps (26) - 选取器: 自定义文件选取窗口, 自定义文件保存窗口
- 重新想象 Windows 8 Store Apps (56) - 系统 UI: Scale, Snap, Orientation, High Contrast 等
- 重新想象 Windows 8 Store Apps (66) - 后台任务: 下载和上传
- 重新想象 Windows 8.1 Store Apps (80) - 控件增强: WebView 之基本应用, POST 数据, 与 JavaScript 交互
- 重新想象 Windows 8.1 Store Apps (82) - 绑定: DataContextChanged, TargetNullValue, FallbackValue, UpdateSourceTrigger
- 重新想象 Windows 8 Store Apps (44) - 多线程之异步编程: 经典和最新的异步编程模型, IAsyncInfo 与 Task 相互转换
- 重新想象 Windows 8.1 Store Apps (88) - 通信的新特性: 新的 HttpClient
- 重新想象 Windows 8 Store Apps (52) - 绑定: 与 Element Model Indexer Style RelativeSource 绑定, 以及绑定中的数据转换