[源码下载]

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

作者: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();
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 = "";
private string _tile2Id = ""; 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();
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) - 锁屏的更多相关文章

  1. 重新想象 Windows 8 Store Apps 系列文章索引

    [源码下载][重新想象 Windows 8.1 Store Apps 系列文章] 重新想象 Windows 8 Store Apps 系列文章索引 作者:webabcd 1.重新想象 Windows ...

  2. 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLock

    [源码下载] 重新想象 Windows 8 Store Apps (46) - 多线程之线程同步: Lock, Monitor, Interlocked, Mutex, ReaderWriterLoc ...

  3. 重新想象 Windows 8 Store Apps (48) - 多线程之其他辅助类: SpinWait, SpinLock, Volatile, SynchronizationContext, CoreDispatcher, ThreadLocal, ThreadStaticAttribute

    [源码下载] 重新想象 Windows 8 Store Apps (48) - 多线程之其他辅助类: SpinWait, SpinLock, Volatile, SynchronizationCont ...

  4. 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务

    [源码下载] 重新想象 Windows 8 Store Apps (64) - 后台任务: 开发一个简单的后台任务 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后 ...

  5. 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知

    [源码下载] 重新想象 Windows 8 Store Apps (67) - 后台任务: 推送通知 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 后台任务 推送通 ...

  6. 重新想象 Windows 8 Store Apps (68) - 后台任务: 控制通道(ControlChannel)

    [源码下载] 重新想象 Windows 8 Store Apps (68) - 后台任务: 控制通道(ControlChannel) 作者:webabcd 介绍重新想象 Windows 8 Store ...

  7. 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo

    [源码下载] 重新想象 Windows 8 Store Apps (34) - 通知: Toast Demo, Tile Demo, Badge Demo 作者:webabcd 介绍重新想象 Wind ...

  8. 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解

    [源码下载] 重新想象 Windows 8 Store Apps (35) - 通知: Toast 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Toa ...

  9. 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解

    [源码下载] 重新想象 Windows 8 Store Apps (36) - 通知: Tile 详解 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通知 Tile ...

随机推荐

  1. 通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 解析办法

    EasyRadius提示:通信错误:(-1)[描述:无法解析路由器DDNS地址,请检查DDNS状态.] 出现以上问题,和easyradius没有直接的联系,主要产生原因有两种可能: 可能1:easyr ...

  2. 程序猿每个VPN真卡手

    昨天起使用了好久好久觉得是世上最好用的poVPN貌似跑路了 刚刚续费了一年也就这样没有了,可是更多的是心疼没有好用的vpn服务. 不过查到了一个红杏chrome插件,不是vpn 如果单单上网页足够了 ...

  3. Android客户端与PHP服务端交互(一)---框架概述

    背景 作为一个普通上班族,总是想做一些自认为有意义的事情,于是乎准备成立一个工作室,尽管目前正在筹备阶段,但是之前有些朋友提出一些需求的时候,我发现自己的能力还是有限,直到最近和一些技术牛朋友聊起这事 ...

  4. 代码片段:基于 JDK 8 time包的时间工具类 TimeUtil

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “知识的工作者必须成为自己时间的首席执行官.” 前言 这次泥瓦匠带来的是一个好玩的基于 JDK ...

  5. sqlserver 字符串最后一次的位置,截取字符串

    --reverse:字符串倒排 SUBSTRING(字段,1,len(字段)- CHARINDEX('-',REVERSE(字段)))

  6. UITabBarController的一些基础设置

    利用代码添加UITabBarController - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  7. PowerDesigner 16.5对SQL Server 2012 生成数据库时"不支持扩展属性"问题

    团队合作设计一套系统数据模型,创建了PDM后,Table.View.Store Procedure等都创建好了,且创建了多个Schema方便管理这些数据库对象,但Table.view.Column等对 ...

  8. 在自己的框架中引用 PHPExcel

    如果直接在框架中的controller中直接引用 xxxx/PHPExcel.php,由于框架中有autoload 与PHPExcel的autoload冲突(加载目录原因), 那么在不想做太多修改的情 ...

  9. shell Builtin variables(shell内建变量)

    内容来自:abs-guide $BASH The path to the Bash binary itself bash$ echo $BASH /bin/bash $BASH_ENV An envi ...

  10. 【转】github上值得关注的前端项目

    综合/资源 frontend-dev-bookmarks 一个巨大的前端开发资源清单.star:15000 front-end-collect 分享自己长期关注的前端开发相关的优秀网站.博客.以及活跃 ...