应用视图
Windows 应用可以包含两种类型的视图:沉浸式视图和 2D 视图。 应用可以在其各种沉浸式和 2D 视图之间切换,并将其 2D 视图显示在监视器上作为窗口或显示在头戴显示设备中作为磁板。 至少具有一个沉浸式视图的应用会分类为混合现实应用。 没有沉浸式视图的应用就是 2D 应用。
概述
沉浸式视图
借助沉浸式视图,你的应用可以创建你周围世界的全息影像,或让用户沉浸在虚拟环境中。 当应用在沉浸式视图中进行绘制时,不会同时绘制任何其他应用程序,多个应用中的全息影像不会组合在一起。 通过不断调整应用渲染场景的视角以匹配用户的头部运动,应用可以渲染全局锁定的全息影像。 全局锁定的全息影像停留在现实世界中的一个固定点,或者可以渲染一个虚拟世界,在用户移动时保留其位置。
在沉浸式视图中,全息影像可以放置在周围世界中
在 HoloLens 上,应用会基于用户的现实世界周围环境渲染其全息影像。 在 Windows Mixed Reality 沉浸式头戴显示设备上,用户看不到现实世界,因此你的应用必须渲染用户将看到的所有内容。
Windows Mixed Reality 主页(包括开始菜单和放置在环境周围的全息影像)在沉浸式视图中也不会渲染。 在 HoloLens 上,Cortana 中继在沉浸式视图显示时发生的任何系统通知,用户可以使用语音输入来做出响应。
在沉浸式视图中,应用还负责处理所有输入。 Windows Mixed Reality 中的输入由视线、手势(仅限 HoloLens)、[语音和运动控制器(仅限沉浸式头戴显示设备)组成。
2D 视图
多个具有 2D 视图的应用程序放置在Windows Mixed Reality 主页周围
具有 2D 视图的应用作为虚拟磁板显示在 Windows Mixed Reality 主页(有时称为“shell”)中,随应用启动器和用户放置在其世界中的其他全息影像一起渲染。 用户可以调整此磁板,使其移动和缩放,但无论大小如何变化,都保持着固定的分辨率。 如果应用的第一个视图是 2D 视图,则 2D 内容将填充用于启动该应用的同一个磁板。
佩戴桌面头戴显示设备时,你可以在当前的桌面监视器上运行通用 Windows 平台 (UWP) 应用。 这些应用现在已经渲染了 2D 视图,并且其内容将在启动时自动显示在用户世界的某个磁板上。 2D UWP 应用可以将 Windows.Universal 设备系列作为磁板运行在桌面头戴显示设备和 HoloLens 上。
2D 视图的一项关键用途是显示使用系统键盘的文本输入窗体。 由于 shell 无法基于沉浸式视图渲染,因此应用必须切换到 2D 视图以显示系统键盘。 需要接受文本输入的应用需要切换到带有文本框的 2D 视图。 当该文本框有焦点时,系统将显示系统键盘,从而允许用户输入文本。
应用可在桌面显示器和台式计算机上连接的头戴显示设备中拥有 2D 视图。 例如,你可以使用其主 2D 视图在桌面监视器上浏览 Edge,以查找 360 度全景视频。 播放视频后,Edge 将在头戴显示设备内启动辅助沉浸式视图以显示沉浸式视频内容。
选择视图
应用激活后,可以选择要显示的视图类型。 对于应用的 CoreApplication,始终存在主应用视图和要创建的任意数量的其他应用视图。 在桌面上,可以将应用视图视为窗口。 混合现实应用模板会创建一个 Unity 项目,其中的主应用视图是沉浸式视图。
可以使用 XAML 等技术来创建额外的 2D 应用视图,以使用应用内购买等 Windows 10 新功能。 如果应用作为其他 Windows 10 设备的 UWP 应用启动,则主视图为 2D 视图。 但是,通过添加另一个沉浸式应用视图以立体地显示体验,用户可以在混合现实中“点亮”。 想象在 XAML 中构建一个照片查看器应用,其中幻灯片放映按钮可切换到沉浸式应用视图,可将应用程序中的照片传输到世界各地和表面。
正在运行的应用可拥有 2D 视图或沉浸式视图
创建沉浸式视图
混合现实应用创建沉浸式视图,这使用 HolographicSpace 类型来实现。
纯沉浸式应用应始终在启动时创建沉浸式视图,即使是从桌面启动。 沉浸式视图始终显示在头戴显示设备中,无论视图从何处创建。 激活沉浸式视图将显示混合现实门户,并指导用户戴好头戴显示设备。
在桌面显示器上,以 2D 视图启动的应用可以创建辅助沉浸式视图,以显示头戴显示设备中的内容。 例如,监视器上的 2D Edge 窗口在头戴显示设备中显示 360 度视频。
沉浸式视图中运行的应用是唯一可见的应用
Windows Mixed Reality 主页中的 2D 视图
除沉浸式视图外,任何其他内容都作为 2D 视图渲染在世界中。
应用在桌面显示器和头戴显示设备中可能为 2D 视图。 不管是在显示器上还是头戴显示设备中,新的 2D 视图将放置在创建其视图的同一 shell 中。 应用或用户当前无法移动混合现实主页和监视器之间的 2D 视图。
在 2D 视图中运行的应用与其他应用共享空间
其他应用磁贴放置
可以使用辅助磁贴 API,在世界中放置任意数量的具有 2D 视图的应用。 这些“固定”磁贴将显示为用户必须放置的初始屏幕,然后可以使用这些屏幕启动应用。 Windows Mixed Reality 目前不支持将任何 2D 磁贴内容呈现为动态磁贴。
应用可以使用辅助磁贴进行多个放置
切换视图
从 2D XAML 视图切换到沉浸式视图
如果应用使用 XAML,则 XAML IFrameworkViewSource 将控制应用的第一个视图。 应用在激活 CoreWindow 之前需要切换到沉浸式视图,以确保应用直接启动到沉浸式体验中。
使用 CoreApplication.CreateNewView 和 ApplicationViewSwitcher.SwitchAsync,使其成为活动视图。
注意
- 从 XAML 视图切换到沉浸式视图时,请不要将 ApplicationViewSwitchingOptions.ConsolidateViews 标志指定为 SwitchAsync,否则将从世界中删除启动应用的磁板。
- 应使用与要切换到视图相关联的调度程序调用 SwitchAsync。
- 如果需要启动虚拟键盘或想要激活另一个应用,则需要将 SwitchAsync 切换回 XAML 视图。
左:应用可以在 2D 视图和沉浸式视图之间切换。 右:当应用进入沉浸式视图时,Windows Mixed Reality 主页和其他应用隐藏。
从沉浸式视图切换回键盘 XAML 视图
在视图之间来回切换的一个常见原因是,在混合现实应用中显示了键盘。 只有在应用显示 2D 视图时,shell 才能显示系统键盘。 如果应用需要获取文本输入,它可以提供包含文本输入字段的自定义 XAML 视图,切换到该视图,然后在输入完成后切换回去。
与上一部分一样,可以使用 ApplicationViewSwitcher.SwitchAsync,从沉浸式视图转换回 XAML 视图。
应用大小
2D 应用视图始终显示在固定虚拟磁板中。 这使得所有 2D 视图显示的内容量完全相同。 下面是有关应用的 2D 视图大小的一些更多详细信息:
- 调整大小时,应用的纵横比将保留。
- 调整大小不会更改应用分辨率和缩放系数。
- 应用无法在世界中查询其实际大小。
具有 2D 视图的应用以固定窗口大小显示
应用磁贴
针对大头针和混合现实中的“所有应用”列表,“开始”菜单使用标准小磁贴和中磁贴。
Windows Mixed Reality 的“开始”菜单
应用之间的交互
生成应用时,可以访问 Windows 10 上可用的、丰富的应用到应用通信机制。 许多新的协议 API 和文件注册可在 HoloLens 上完美运行,可用于应用启动和通信。
对于桌面头戴显示设备,与给定文件扩展名或协议关联的应用可能是 Win32 应用,并且只能在桌面显示器或桌面磁板上显示。
协议
HoloLens 支持通过 Windows.System.Launcher API 实现应用到应用的启动。
启动另一个应用程序时,需要考虑一些注意事项:
执行非模式启动(如 LaunchUriAsync)时,用户必须先放置应用,然后才能与其交互。
执行模式启动(例如通过 LaunchUriForResultsAsync)时,模式应用将放置在窗口顶部。
Windows Mixed Reality 无法在独占视图之上覆盖应用程序。 若要显示启动的应用,Windows 将用户返回到世界,以显示该应用程序。
文件选取器
HoloLens 支持 FileOpenPicker 和 FileSavePicker 约定。 但是,没有预安装的应用可以满足文件选取器约定。 这些应用(例如 OneDrive)可以从 Microsoft Store 安装。
如果安装了多个文件选取器应用,则不会看到任何用于选择要启动应用的消歧 UI。 而是选择安装的第一个文件选取器。 保存文件时将生成文件名,其中包括时间戳。 用户无法对其进行更改。
默认情况下,本地支持以下扩展名:
应用 | 扩展 |
---|---|
Photos | bmp、gif、jpg、png、avi、mov、mp4、wmv |
Microsoft Edge | htm、html、pdf、svg、xml |
应用约定和 Windows Mixed Reality 扩展
使用应用约定和扩展点可以注册应用,以利用更深层的操作系统功能,例如处理文件扩展名或使用后台任务。 以下列表为 HoloLens 上支持和不支持的约定和扩展点。
约定或扩展 | 是否支持? |
---|---|
用户头像提供程序(扩展) | 不支持 |
Alarm | 不支持 |
应用服务 | 支持但功能不全 |
约会提供程序 | 不支持 |
自动播放(扩展) | 不支持 |
后台任务(扩展) | 部分支持(并非所有触发器都有效) |
更新任务(扩展) | 支持 |
缓存文件更新程序约定 | 支持 |
相机设置(扩展) | 不支持 |
拨号协议 | 不支持 |
文件激活(扩展) | 支持 |
文件打开选取器合约 | 支持 |
文件保存选取器约定 | 支持 |
锁屏界面调用 | 不支持 |
媒体播放 | 不支持 |
“播放到”约定 | 不支持 |
预安装配置任务 | 不支持 |
Print 3D 工作流 | 支持 |
打印任务设置(扩展) | 不支持 |
URI 激活(扩展) | 支持 |
受限启动 | 不支持 |
“搜索”约定 | 不支持 |
“设置”约定 | 不支持 |
“共享”约定 | 不支持 |
SSL/证书(扩展) | 支持 |
Web 帐户提供程序 | 支持 |
应用文件存储
所有存储都通过 Windows.Storage 命名空间。 HoloLens 不支持应用存储同步/漫游。 有关详细信息,请查看以下文档:
已知文件夹
有关 UWP 应用的完整详细信息,请参阅 KnownFolders。
properties | 在 HoloLens 上受支持 | 在沉浸式头戴显示设备上受支持 | 说明 |
---|---|---|---|
AppCaptures | ✔️ | ✔️ | 获取“应用捕获”文件夹。 |
CameraRoll | ✔️ | ✔️ | 获取“本机照片”文件夹。 |
DocumentsLibrary | ✔️ | ✔️ | 获取“文档库”。 文档库不用于常规用途。 |
MusicLibrary | ✔️ | ✔️ | 获取“音乐库”。 |
Objects3D | ✔️ | ✔️ | 获取“3D 对象”文件夹。 |
PicturesLibrary | ✔️ | ✔️ | 获取“图片库”。 |
播放列表 | ✔️ | ✔️ | 获取播放列表文件夹。 |
SavedPictures | ✔️ | ✔️ | 获取“保存的图片”文件夹。 |
VideosLibrary | ✔️ | ✔️ | 获取“视频库”。 |
HomeGroup | ✔️ | 获取“家庭组”文件夹。 | |
MediaServerDevices | ✔️ | 获取数字生活网络联盟 (DLNA) 媒体服务器设备的文件夹。 | |
RecordedCalls | ✔️ | 获取录制的通话文件夹。 | |
RemovableDevices | ✔️ | 获取可移动设备文件夹。 |
应用包
在 Windows 10 中,用户将不再面向某一操作系统,而是让应用面向一个或多个设备系列。 设备系列标识了在设备系列中的设备上预期出现的 API、系统特征和行为。 它还可以确定可从 Microsoft Store 安装应用的一组设备。
- 若要同时面向桌面头戴显示设备和 HoloLens,请将应用定向到 Windows.Universal 设备系列。
- 若仅面向桌面头戴显示设备,请将应用定向到 Windows.Desktop 设备系列。
- 若仅面向 HoloLens,请将应用定向到 Windows.Holographic 设备系列。