欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > windows >内容正文

windows

重新想象 Windows 8 Store Apps (59) - 锁屏

发布时间:2023/12/15 windows 62 豆豆
生活随笔 收集整理的这篇文章主要介绍了 重新想象 Windows 8 Store Apps (59) - 锁屏 小编觉得挺不错的,现在分享给大家,帮大家做个参考.
原文:重新想象 Windows 8 Store Apps (59) - 锁屏

[源码下载]


重新想象 Windows 8 Store Apps (59) - 锁屏



作者:webabcd


介绍
重新想象 Windows 8 Store Apps 之 锁屏

  • 登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
  • 发送徽章或文本到锁屏
  • 将一个 app 的多个 tile 绑定到锁屏
  • 自定义锁屏图片



示例
1、演示如何登录锁屏,获取当前程序的锁屏权限,从锁屏中移除
LockScreen/AccessLockScreen.xaml

<Pagex: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

<Pagex: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

<Pagex: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 的可以登录锁屏的 SecondaryTileprivate 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"));// 需要指定 LockScreenBadgeLogosecondTile.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());}}// 即支持徽章又支持文本的可以登录锁屏的 SecondaryTileprivate 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"));// 需要指定 LockScreenBadgeLogosecondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/BadgeLogo.png");// 需要设置 LockScreenDisplayBadgeAndTileText 为 truesecondTile.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

<Pagex: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) - 锁屏的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。