分配的访问权限的展台应用:最佳做法

原文: 分配的访问权限的展台应用:最佳做法

best practices guidance for developing a kiosk app for assigned access.

在 Windows 10 中,你可以使用锁屏框架和分配的访问权限创建展台应用,该应用允许用户与设备上的单个应用进行交互。 本文档介绍了如何实现展台应用,并介绍了最佳做法。所有示例代码都采用 C# 编写,但应该可以轻松地翻译为你选择的语言,因为基础框架是 Windows RT。本文档专为想要为其客户编写展台应用的 OEM 和 ISV 而编写。

条款

术语描述

分配的访问权限

允许系统管理员通过限制公开给设备用户的应用程序入口点来管理用户体验的功能。例如,你可以限制你公司的客户仅使用一个应用,以便将你的电脑用作展台。每当有人使用指定帐户登录时,他们仅能使用该应用。他们不能使用触摸手势、鼠标、键盘或硬件按钮切换应用或关闭应用。他们同样看不到任何应用通知。

锁屏界面应用(或锁屏应用)

利用设置动态壁纸功能或利用新的锁屏可扩展性框架的应用程序。

上方锁屏界面应用(或上方锁屏应用)

锁屏界面应用运行时(例如,桌面锁定时),在其上方启动的应用程序。

下方锁屏应用

在已解锁的 Windows 上下文中正常运行的应用程序。

LockApplicationHost

允许上方锁屏界面应用请求设备解锁并允许应用进行注册以便在设备开始解锁时收到系统通知的 WinRT 类。

视图或应用程序视图

每个视图都是应用中的一个独立窗口。应用可以拥有一个主视图,并可根据需要创建多个辅助视图。有关详细信息,请参阅 ApplicationView。

 

在后台

Windows 10 中分配的访问权限可利用新的锁屏框架。当分配的访问权限用户登录时,后台任务将锁定桌面,并且锁屏界面应用将启动,然后运行锁屏上方的展台应用。展台应用实际上作为上方锁屏界面应用运行。

当锁屏框架启动锁屏上方的展台应用时,它将为展台应用创建新的辅助视图,并在新的辅助视图中呈现其所有主视图。

必须在应用程序清单文件中使用 windows.aboveLockScreen 扩展,才能使你的应用显示在“设置”的“分配的访问权限”中。有关应用程序清单的示例,请参阅附录

要点  Windows 10 中“设置”下的“分配的访问权限”应用列表旨在仅显示 Windows 10 UWP(通用 Windows 平台)应用程序,其 UAP 扩展名为 windows.aboveLockScreen

最佳做法

保护你的信息

如果展台应用打算以分配的访问权限并且以正常的方式在锁屏上方运行,则你可能需在已解锁的 Windows 上下文中创建一个要在锁屏上方呈现的不同页面和一个用于锁屏下方的页面。这将使你可以在展台模式下避免显示敏感信息,因为展台模式通常意味着匿名访问。下面是你使用两个不同页面时要遵循的步骤,一个用于锁屏下方,一个用于锁屏上方:

  1. 在 App.xaml.cs 中的 OnLaunched 函数替代内部,尝试在 rootFrame 导航之前获取一个 LockApplicationHost 类的实例。
  2. 如果调用失败,则展台应用应在锁屏下方正常启动。
  3. 如果调用成功,则展台应用应在运行于分配的访问权限模式下的锁屏上方启动。你可能希望此版本的展台应用具有一个不同的主页面,以便隐藏敏感信息。

以下示例将演示如何执行此操作。AssignedAccessPage.xaml 已预定义,而且当应用检测到 AssignedAccessPage.xaml 正在上方锁屏模式下运行时,将导航到该页面。因此,普通页面将仅在下方锁屏方案下显示。

你可以使用此方法确定该应用在其生命周期内是否随时都在锁屏界面上运行并相应地做出响应。

using Windows.ApplicationModel.LockScreen;// inside the override OnLaunched function in App.xaml.csif (rootFrame.Content == null)
{LockApplicationHost host = LockApplicationHost.GetForCurrentView();if (host == null){// if call to LockApplicationHost is null, this app is running under lock// render MainPage normallyrootFrame.Navigate(typeof(MainPage), e.Arguments);}else{// If LockApplicationHost was successfully obtained// this app is running as a lock screen app, or above lock screen app// render a different page for assigned access use// to avoid showing regular main page to keep secure information saferootFrame.Navigate(typeof(AssignedAccessPage), e.Arguments);}
}

多个视图、窗口和线程

请记住,仅主视图或窗口才会在分配的访问权限模式下呈现,但是要呈现在新的辅助视图中。你在应用中创建的任何其他视图将不呈现。请确保你希望用户看到或访问的所有内容都在主窗口中,因为用户无法看到其他视图。

锁屏框架可将展台应用的主视图呈现于新的辅助视图中(它对该应用完全透明)。你不需要手动创建适用于上方锁屏模式的辅助视图,因为锁屏框架会为你创建一个。这意味着你的应用在上方锁屏模式下运行时实际上将有两个视图。当你的应用在分配的访问权限模式下时,在你的主窗口中运行以下代码,以通过查看视图计数和值来确认当前窗口是否为主窗口。

using Windows.ApplicationModel.Core;CoreApplication.GetCurrentView().IsMain //false
CoreApplication.Views.Count //2

下面是示例布局。

Mt633799.Assignedaccesssamplelayout(zh-cn,VS.85).png

调度程序

每个视图或窗口都有其自己的调度程序。在分配的访问权限模式下,不应使用 MainView 调度程序,应改为使用 CurrentView 调度程序。

例如,在以下代码示例中,.xaml 页面上有一个“按钮”和一个 TextBlock。向该按钮添加单击事件处理程序。该处理程序会执行一些后台工作,然后更新 TextBlock的文本。在此示例中使用 CoreApplication.MainView.Dispatcher 将导致应用崩溃,因为在分配的访问权限模式下,主窗口不是 MainView,但在辅助视图中呈现。建议你使用 CoreApplication.GetCurrentView.Dispatcher

using Windows.ApplicationModel.Core; private async void Button_Click(object sender, RoutedEventArgs e)
{button.IsEnabled = false;// start a background task and update UI periodically (every 1 second)// using MainView dispatcher in below code will end up with app crash // in assigned access mode, use GetCurrentView().Dispatcher insteadawait CoreApplication.GetCurrentView().Dispatcher.RunAsync(CoreDispatcherPriority.Normal,async () =>{for (int i = 0; i < 60; ++i){// do some background work, here we use Task.Delay to sleepawait Task.Delay(1000);// update UItextBlock1.Text = "   " + i.ToString();}button.IsEnabled = true;});
}

添加除分配的访问权限之外的方法

在某些情况下,用于停止应用程序的电源按钮、Esc 按钮或其他按钮可能在键盘上无法启用或不可用。在这些情况下,请提供一种方法来停止分配的访问权限,例如软件键。以下事件处理程序显示了如何通过响应可能由软件键触发的按钮单击事件来停止分配的访问权限模式。

LockApplicationHost^ lockHost = LockApplicationHost::GetForCurrentView();if (lockHost != nullptr){lockHost->RequestUnlock();}

生命周期管理

如果展台应用意外结束,分配的访问权限框架将尝试重新启动它。如果用户具有对键盘的物理访问权限并按下 Ctrl+Alt+Del 显示登录屏幕,将触发“正在解锁”事件。分配的访问权限框架侦听此事件并将尝试终止展台应用。你的展台应用也可以对此事件注册一个处理程序并退出。有关如何执行此操作的示例,请参阅下面的代码。

using Windows.ApplicationModel.LockScreen;public AssignedAccessPage()
{this.InitializeComponent();LockApplicationHost lockHost = LockApplicationHost.GetForCurrentView();if (lockHost != null){lockHost.Unlocking += LockHost_Unlocking;
}
}private void LockHost_Unlocking(LockApplicationHost sender, LockScreenUnlockingEventArgs args)
{// save any unsaved work and gracefully exit the appApp.Current.Exit();
}

在用户按下 Ctrl+Alt+Del 并且登录屏幕出现后,可能发生以下两个事项:

  1. 用户知道分配的访问权限的帐户密码并解锁桌面。分配的访问权限框架将启动、锁定桌面,而且锁屏界面应用也将启动,从而启动展台应用。
  2. 用户不知道密码,或不会采取任何进一步的操作。登录屏幕将超时,桌面也会重新锁定;锁屏界面应用将启动,从而启动展台应用。

不要在分配的访问权限模式下创建新的窗口或视图

如果在分配的访问权限模式下调用以下函数,则该调用将结束,并带有运行时异常。如果相同的应用(在锁屏下方使用时)调用此函数,则不会导致运行时异常。使用 LockApplicationHost 有助于确定应用的分配的访问权限模式,并相应地对你的应用进行编码,例如,如果应用处于分配的访问权限模式下,则不会创建新的视图。

Windows.ApplicationModel.Core.CoreApplication.CreateNewView(); //causes exception

附录

下面是一个示例应用程序清单,你可以看到 windows.aboveLockScreen UAP 扩展名。必须在你的 Windows 10 通用 Windows 平台 (UWP) 应用中使用此扩展名,以便它在“设置”的“分配的访问权限”应用列表中显示。

<Package xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10" xmlns:mp="http://schemas.microsoft.com/appx/2014/phone/manifest" xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10" IgnorableNamespaces="uap mp"><Identity Name="bd4df68b-dc18-4748-a14e-bc21dac13736" Publisher="CN=chandde" Version="1.0.0.0" /><mp:PhoneIdentity PhoneProductId="bd4df68b-dc18-4748-a14e-bc21dac13736" PhonePublisherId="00000000-0000-0000-0000-000000000000" /><Properties><DisplayName>AboveLock</DisplayName><PublisherDisplayName>chandde</PublisherDisplayName><Logo>Assets\StoreLogo.png</Logo></Properties><Dependencies><TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.0.0" MaxVersionTested="10.0.0.0" /></Dependencies><Resources><Resource Language="x-generate" /></Resources><Applications><Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="AboveLock.App"><uap:VisualElements DisplayName="AboveLock" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="AboveLock" BackgroundColor="transparent"><uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"></uap:DefaultTile><uap:SplashScreen Image="Assets\SplashScreen.png" /></uap:VisualElements><Extensions><uap:Extension Category="windows.lockScreenCall" /><uap:Extension Category="windows.aboveLockScreen" /></Extensions></Application></Applications><Capabilities><Capability Name="internetClient" /></Capabilities>
</Package>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257250.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 阻止了对组件 'Ad Hoc Distributed Queries' 的 STATEMENT'OpenRowset/OpenDatasource' 的访问的解决方案...

今天写了一个excel表的导入功能&#xff0c;结果在excel表中的内容导入到页面时报错&#xff1a;SQL Server 阻止了对组件 Ad Hoc Distributed Queries 的 STATEMENTOpenRowset/OpenDatasource 的访问&#xff0c;因为此组件已作为此服务器安全配置的一部分而被关闭。系统管…

Mongo客户端MongoVUE的基本使用

这里没有涉及到服务器以及客户端的安装&#xff0c;文章主要介绍mongo客户端mongoVUE的使用 一、数据库连接 点击绿色加号添加一个连接&#xff0c;输入name、server、port&#xff0c;点击save&#xff0c;点击connect进行连接 二、添加 1.右键添加一个Database 2.输入名称&am…

Vim杂记:Sublime的配色方案

一、前言                                     爱美之心人皆有之&#xff0c;sublime的配色实在好看&#xff0c;于是希望Vim也能这样。 二、配置                                     1.下载monok…

计算机一级考试有三科,全国计算机一级考试是一级WPS Office 一级MS Office 一级Photoshop 三个任选一个考试吗?...

满意答案nanrrui3j2017.08.24采纳率&#xff1a;41% 等级&#xff1a;9已帮助&#xff1a;415人全国计算机一级考试是有考试大纲的&#xff0c;按照大纲要求是三科都考。一级MS Office、一级WPS Office、一级Photoshop&#xff0c;一级共三个科目。完全采取上机考试形式&…

Docker学习(三):镜像

2019独角兽企业重金招聘Python工程师标准>>> 1、简介 docker运行前需要本地存在对应的镜像&#xff0c;若镜像不存在本地&#xff0c;docker会先尝试从默认的镜像仓库下载&#xff08;Docker Hub公共注册服务器中的仓库&#xff09;。用户也可以配置&#xff0c;使用…

系统流程图

转载于:https://www.cnblogs.com/ADCARRY/p/5462270.html

一年级下册计算机教学计划,【实用】一年级下册教学计划4篇

【实用】一年级下册教学计划4篇光阴迅速&#xff0c;一眨眼就过去了&#xff0c;我们的教学工作又将抒写新的篇章&#xff0c;写好教学计划才不会让我们努力的时候迷失方向哦。相信大家又在为写教学计划犯愁了吧&#xff0c;下面是小编精心整理的一年级下册教学计划4篇&#xf…

PowerDesigner中NAME和COMMENT的互相转换,需要执行语句

原文&#xff1a;http://www.cnblogs.com/yelaiju/archive/2013/04/26/3044828.html由于PDM 的表中 Name 会默认Code 所以很不方便, 所以需要将 StereoType 显示到表的外面来 打开[工具]->[显示属性](英文:Display Preferences) ->Content->Table->右边面板Columns…

成都计算机中心起名,成都给宝宝起名的地方哪里好

成都给宝宝起名的地方哪里好2018-09-21每一个人都拥有一个好听大气的名字&#xff0c;名字作为一个人的标识&#xff0c;是人与人交流的代号&#xff0c;因此有一个好听寓意大气的名字是很关键的&#xff0c;名字毕竟关乎着对他人的第一印象&#xff0c;所以在起名字方面父母们…

20150206--JS巩固与加强4-02

20150206--JS巩固与加强4-02 五、属性遍历与删除 1、使用for…in…遍历自定义对象属性 基本语法&#xff1a; for…in…&#xff08;主要是完成对对象的遍历&#xff09; 示例代码: 运行效果&#xff1a; 说明&#xff1a;在17行代码&#xff0c;不能使用p1.i形式进行自定义对象…

面向对象课程 - T-shirt

拿到了一件谜一样的T-shirt 吓得我赶紧捏了下hbb 转载于:https://www.cnblogs.com/andwho/p/5465165.html

状态开关(ToggleButton)

状态开关&#xff08;ToggleButton&#xff09;&#xff1a; 常用属性&#xff1a;isChecked&#xff08;是否被选中&#xff0c;如true&#xff09; 监听&#xff1a;1.监听方法&#xff1a;setOnCheckedChangeListener 2.监听器&#xff1a;CompoundButton.OnCheckedChangeLi…

冲刺第二阶段

转载于:https://www.cnblogs.com/lixin20/p/4549338.html

微信消息推送服务器吗,消息推送

# 消息推送接入微信小程序消息推送服务&#xff0c;可以两种方式选择其一&#xff1a;# 开发者服务器接收消息推送开发者需要按照如下步骤完成&#xff1a; 填写服务器配置验证服务器地址的有效性据接口文档实现业务逻辑&#xff0c;接收消息和事件# 第一步&#xff1a;填写服务…

windows下eclipse远程连接hadoop集群开发mapreduce

转载请注明出处&#xff0c;谢谢2017-10-22 17:14:09之前都是用python开发maprduce程序的&#xff0c;今天试了在windows下通过eclipse java开发&#xff0c;在开发前先搭建开发环境。在此&#xff0c;总结这个过程&#xff0c;希望能够帮助有需要的朋友。用Hadoop eclipse plu…

20145308刘昊阳 《Java程序设计》实验五报告

20145308刘昊阳 《Java程序设计》实验五 Java网络编程及安全 实验报告 实验名称 Java网络编程及安全 实验内容 1&#xff0e;掌握Socket程序的编写&#xff1b; 2&#xff0e;掌握密码技术的使用&#xff1b; 3&#xff0e;设计安全传输系统。 统计的PSP(Personal Software Pro…

FPL 2017最佳论文:如何对FPGA云发动DoS攻击?

第27届现场可编程逻辑与应用国际会议&#xff08;The International Conference on Field-Programmable Logic and Applications&#xff0c;FPL&#xff09;九月份在比利时根特召开。在FPL 2017上&#xff0c;一篇来自德国卡尔斯鲁厄理工学院&#xff08;Karlsruhe Institute …

BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )

数据 n < 30000 , 然后 O( n ) 的贪心也过了..... USACO 数据是有多弱啊 ( ps : BZOJ 1640 和此题一模一样 , 双倍经验 ) --------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include…

数据说话,88000条数据绘制北京市地图

偶获得一批数据&#xff0c;本着好玩的态度绘制下来看看到底是什么鬼&#xff0c;绘制的结果如下&#xff1a; 呵呵&#xff0c;什么都不像。而且中间最重要的部分因数据量过大绘制的已经看不清楚了。于是乎&#xff0c;缩小绘制范围&#xff0c;去除周围没有用的数据。重新绘制…

我的第一个python web开发框架(11)——工具函数包说明(二)

db_helper.py是数据库操作包&#xff0c;主要有两个函数&#xff0c;分别是read()数据库读操作函数和write()数据库写操作函数。这个包的代码是从小戴同学分享的博文改造过来的。 1 #!/usr/bin/env python2 # codingutf-83 4 import psycopg25 from common import log_helper6 …