HoloLens开发手记 - 应用程序模型 App model

时间:2022-09-25 14:25:25

HoloLens使用Universal Windows Platform (UWP)提供的应用模型。UWP应用模型定义了应用如何被安全和完全地安装、更新、版本控制和移除。它管理了应用生命周期 - 应用如何被执行、休眠和中断 - 以及如何保留应用状态。它也覆盖了和操作系统、文件以及其他应用的集成和交互。

HoloLens开发手记 - 应用程序模型 App model

应用生命周期 App lifecycle


全息应用的生命周期涉及到了标准应用的概念,例如放置。启动、中断和移除。

放置就是启动 Placement is launch

每一个应用都通过放置应用磁贴在HoloLens shell中启动。这些应用磁铁,在放置的时候,就将开始运行应用。这些应用磁贴会持久化的停留在它们被放置的位置,任何时候你都可以从它们返回应用。

HoloLens开发手记 - 应用程序模型 App model

一旦完成放置(除非放置是由应用间启动唤起的),应用开始启动。HoloLens应用同一时刻可以运行一个应用。一旦你放置和启动了一个应用,任何其他激活的应用都会被挂起,在你放置它的地方,应用磁贴上会留下一个它最后状态的截图。阅读标准生命周期的文章来了解更多关于处理恢复和其他生命周期事件的方法。

HoloLens开发手记 - 应用程序模型 App model

移除是关闭/终止处理 Remove is close/terminate process

当你从世界中移除一个放置好的应用磁贴,这闭合了基础的流程。这对于确保你的应用被终止或者重启一个有问题的应用可能是有用的。

应用暂停/终止 App suspension/termination

使用HoloLens,用户能够为一个应用创建多个启动入口。它们通过从开始菜单启动你的应用,并将应用磁贴放置在世界中来做到这点。每一个应用磁贴都表现为不同的启动入口,在系统中都具有一个单独的磁贴实例。SecondaryTile.FindAllAsync() 查询的队列将可以列出所有应用的二级磁贴。

当一个UWP应用暂停时,应用当前状态的屏幕截图被获取。

HoloLens开发手记 - 应用程序模型 App model

与其他Windows 10平台的关键区别是通过CoreApplication.Resuming和CoreApplication.Activated事件,应用如何被通知它的一个实例被激活。

情况                                           恢复 激活
从开始菜单启动一个应用新实例   使用一个新的TileId激活应用
从开始菜单启动第二个应用实例   使用一个新的TileId激活应用
选中当前未激活的应用实例   使用实例关联的TileId激活应用
选中一个不同的应用,然后选中先前激活的实例 恢复被触发  
选中一个不同的应用,然后选中先前未激活的实例 恢复被触发 然后使用实例关联的TileId激活应用

扩展的执行 Extended execution

有时你的应用需要继续在后台做一些工作或者播放声音。Background tasks 在Windows Holographic里是可以使用的,但是有一些限制

HoloLens开发手记 - 应用程序模型 App model

应用视图 App views


当你的应用激活时,你可以选择显示哪种类型的视图。对一个应用CoreApplication来说,总存在一个初始的应用视图(app view)和任意数量的其他你想创建的次级视图。对于桌面环境,你可以认为一个应用视图就是一个窗口。我们的全息应用项目模板将会创建一个初始视图是全息视图的Unity项目。你的应用可以使用像Xaml这样的技术来创建额外的2D视图来使用应用内购买之类的shell控件。如果你的应用以通用应用形式启动,那么初始视图会是2D的,但是你可以通过添加一个额外的全息视图来提升在HoloLens的体验。想象一下,我们用XAML构建了一个图片查看器,里面有个视图切换按钮,可以一键切换到全息视图,在全息视图中,来自应用的照片飞到世界和物体表面上。

HoloLens开发手记 - 应用程序模型 App model

创建一个全息视图 Create a Holographic view

全息视图是指那些通过HolographicSpace 类型创建了全息视图的应用。

HoloLens开发手记 - 应用程序模型 App model

混合世界中的2D视图 2D view in the Mixed World

任何非全息视图的在你的世界中都会被渲染成2D视图.

HoloLens开发手记 - 应用程序模型 App model

次级视图磁贴的放置 Placement of further App Tiles

使用二级磁贴(Secondary Tile) API你可以放置任意数量你想要的2D视图。这些被放置的磁贴将会以闪屏的形式出现,用以来之后启动你的应用。Windows Holographic当前不支持渲染任何2D磁贴作为动态磁贴。在二级磁贴API(Secondary tile APIs)页面你可以了解到更多信息。

HoloLens开发手记 - 应用程序模型 App model

切换视图 Switching views

从2D视图切换到全息视图 Switching from  the 2D XAML view to the holographic view

如果用户使用了XAML,然后XAML IFrameworkViewSource将会控制应用的首个视图。应用需要在激活CoreWindow之前切换到全息视图,以保证应用直接进入全息体验。

使用CoreApplication::CreateNewView 和 ApplicationViewSwitcher::SwitchAsync 来实现视图的切换。

注意:

  • 当从XAML视图切换到全息视图或将被从世界中移除的应用面板时,不要为SwitchAsync方法指定Consolidate标记
  • SwitchAsync方法应该被你想要切换去的视图关联的Dispatcher所调用
  • 如果你需要启动一个虚拟键盘或想要激活其他应用,你需要使用SwitchAsync方法回到XAML视图

HoloLens开发手记 - 应用程序模型 App model

HoloLens开发手记 - 应用程序模型 App model

从全息视图切换回键盘XAML视图 Switching from the holographic view back to a keyboard XAML view

在视图间反复切换通常是为了在全息应用显示一个键盘。如果你的应用显示了一个2D视图,shell只能够显示系统键盘。如果你的应用需要获取文本输入源,然后他们会写一个带有文本输入框的自定义XAML视图,它能在切换到它后,输入完成后再切换回去。

上述所说情形,可以使用ApplicationViewSwitcher::SwitchAsync 从你的全息视图切换回XAML视图。

应用大小 App size


2D应用视图总是出现在一个固定的可视面板中。这使得所有2D视图显示同等数量的内容。下面是关于2D应用视图大小的进一步细节:

  • 调整大小时,应用的宽高比始终一样
  • 调整大小时,应用的分辨率和拉伸率都不会改变
  • 应用不能查询他们在世界中实际的大小

HoloLens开发手记 - 应用程序模型 App model

应用磁贴 App tiles


开始菜单使用了标准小号和中号磁贴用于pin视图和所有应用视图。

HoloLens开发手记 - 应用程序模型 App model

应用间交互 App to app interactions


当你构建应用时,Windows 10上你可以获得丰富的应用间通信机制。即使HoloLens目前不支持最新的应用协议启动(app service protocol launches),但是许多新的协议API和文件注册机制在HoloLens上能够确保应用间启动和通信。

协议 Protocols

HoloLens通过Windows.System.Launcher APIs 支持应用间启动。

当启动其他应用时,以下内容要被考虑:

  • 当非模态启动时,例如LaunchUriAsync,用户在与应用交互前必须放置好它
  • 当模态启动时,例如LaunchUriForResultsAsync,模态应用会被放置在窗口顶部
  • HoloLens不能在独占视图(这里应该是指全息视图?)顶部覆盖上其他应用。为了显示启动的应用,HoloLens会使用会回到世界中以显示此应用。

文件选取器 File pickers

HoloLens支持FileOpenPicker 和 FileSavePicker 合约。尽管没有支持文件选取合约的应用被预装,但是你可以从Windows Store下载它们 - 例如OneDrive。

如果你安装了多个文件选取应用,你将不会看到任何有歧义的UI,这些UI通常是用来选取启动哪个应用。取而代之的是,首个安装的文件选取器将会被选中。保存文件时,会自动生成包括时间戳的文件名。用户不能改变文件爱你们。

默认情况下,以下是本地支持的文件拓展格式:

HoloLens开发手记 - 应用程序模型 App model

应用合约和Windows Holographic扩展 App contracts and  Windows Hologrphic extensions

应用合约和拓展入口允许你注册你的应用来使用更底层的操作系统特性,例如处理文件拓展或者使用后台任务。下面是Windows Holographic支持的合约和拓展入口列表。这与它支持的API集合不同。

Contract or Extension

合约或拓展

Supported?

是否支持

Account Picture Provider (extension) Unsupported
Alarm Unsupported
App service

Supported but not fully functional in the current version of Windows Holographic

支持,但是当前版本不是所有功能都可用

Appointments provider Unsupported
AutoPlay (extension) Unsupported
Background tasks (extension)

Partially Supported (not all triggers work on Windows Holographic)

部分支持,目前版本不是所有触发器都可用

Update task (extension) Supported
Cached file updater contract Supported
Camera settings (extension) Unsupported
Dial protocol Unsupported
File activation (extension) Supported
File Open Picker contract Supported
File Save Picker contract Supported
Lock screen call Unsupported
Media playback Unsupported
Play To contract Unsupported
Preinstalled config task Unsupported
Print 3D Workflow Supported
Print task settings (extension) Unsupported
URI activation (extension) Supported
Restricted launch Unsupported
Search contract Unsupported
Settings contract Unsupported
Share contract Unsupported
SSL/certificates (extension) Supported
Web account provider Supported

应用文件存储 App File Storage


所有的存储都是通过Windows.Storage命名空间实现。阅读下面的内容来了解更多细节。HoloLens不支持应用存储同步/漫游。

已知目录 Known folders

查看KnownFolders 来了解更多UWP应用使用KnownFolders的细节。

Property

属性

Supported on HoloLens Development Edition

HoloLens开发板是否支持

Description

描述

AppCaptures Yes

Gets the App Captures folder.

获取应用捕获文件夹

CameraRoll Yes

Gets the Camera Roll folder.

相机文件夹

DocumentsLibrary Yes

Gets the Documents library. The Documents library is not intended for general use.

文档库

MusicLibrary Yes

Gets the Music library.

音乐库

Objects3D Yes

Gets the Objects 3D folder.

3D对象文件夹

PicturesLibrary Yes

Gets the Pictures library.

图片库

Playlists Yes

Gets the play lists folder.

播放列表文件夹

SavedPictures Yes

Gets the Saved Pictures folder.

保存的图片文件夹

VideosLibrary Yes

Gets the Videos library.

视频库

HomeGroup No

Gets the HomeGroup folder.

家庭组文件夹

MediaServerDevices No

Gets the folder of media server (Digital Living Network Alliance (DLNA)) devices.

媒体设备文件夹

RecordedCalls No

Gets the recorded calls folder.

电话录音文件夹

RemovableDevices No

Gets the removable devices folder.

可移动设备文件夹

应用打包 App package


使用Windows10,你不再需要以操作系统为目标但是取而代之的是,你需要以一个或多个设备家族来作为目标(target your app to one or more device families)。一个设备家族定义了此家族中所有设备都可应用的API、系统字符集和行为集合。它也决定了你的应用从应用商店中能安装到哪系列的设备。

翻译自:https://developer.microsoft.com/en-us/windows/holographic/app_model#App_views

HoloLens开发手记 - 应用程序模型 App model的更多相关文章

  1. HoloLens开发手记 - HoloLens真机上手简评

    千呼万唤始出来,终于今天拿到了HoloLens真机. 使用体验 使用自带的应用录制了一段使用视频,如下 设备概览 包装盒 本体 试戴 实际效果 GalaxyExplorer试玩 全息图像贴到现实场景表 ...

  2. HoloLens开发手记 - 使用HoloLens模拟器 Using HoloLens emulator

    首先下载HoloLens模拟器 HoloLens模拟器运行在没有真机的情况下在你的PC上测试应用,属于HoloLens开发工具系列.模拟器使用了Hyper-V虚拟机.通常通过传感器获取的人体和环境输入 ...

  3. HoloLens开发手记-开发概述Development overview

    开发HoloLens全息应用将使用UWP平台(Universal Windows Platform),所有的HoloLens应用都是Win10通用应用,所有UWP通用应用都可以在HoloLens上运行 ...

  4. HoloLens开发手记 - HoloLens上的应用视图 App views on HoloLens

    运行在HoloLens上的应用可能包含2种视图,分别是全息视图和2D视图.应用可以在全息视图和2D视图之间转换,这常被用于访问系统提供的接口,例如虚拟键盘.拥有至少一个全息视图的应用被归类为全息应用. ...

  5. HoloLens开发手记 - 构建2D应用 Building 2D apps

    HoloLens可以让我们在真实世界中看到全息图像内容.但是它本质上还是一台Windows 10设备,这意味着HoloLens可以以2D应用形式运行Windows Store里的大部分UWP应用. 目 ...

  6. HoloLens开发手记 - Vuforia开发概述 Vuforia development overview

    关于Vuforia,开发AR应用的人基本都会熟悉.之前我也写过一篇关于Vuforia开发的博客:Vuforia AR SDK入门 今天这篇博客则主要是谈谈HoloLens使用Vuforia开发混合现实 ...

  7. HoloLens开发手记-实现3D应用启动器

    一直有人问我,第三方应用在HoloLens上可以实现3D启动图标吗?就像微软官方出的应用那样.在不久之前,这个问题的答案还是No. 但是随着最新的Windows build 1803版本的发布,现在我 ...

  8. HoloLens开发手记 - 使用Windows设备控制台 Using Windows Device Portal

    Windows设备控制台允许你通过Wi-Fi或USB来远程控制你的HoloLens设备.设备控制台是HoloLens上的一个Web Server,你可以通过PC的浏览器来连接到它.设备控制台包含了很多 ...

  9. HoloLens开发手记 - 使用Visual Studio Using Visual Studio

    不论你是否使用DirectX或Unity来开发全息应用,你都会使用Visual Studio 2015来进行调试和部署应用.在本部分,你将会学习以下内容: 如何通过Visual Studio将你的应用 ...

随机推荐

  1. python address already in use

    1)找到使用端口的进程pid netstat -lp 2)kill掉pid kill -9 1234

  2. 不带www的域名跳转至www域名

    由于我网站是架设在Linux的VPS上的,所以我用例如下方法 .htaccess文件 首先要开启Apache服务器的.htaccess功能,我在Apache安全配置中有分享过:开启之后新建一个.hta ...

  3. 解决setInterval计时器不准的问题

    在js中如果打算使用setInterval进行倒数,计时等功能,往往是不准确的,因为setInterval的回调函数并不是到时后立即执行,而是等系统计算资源空闲下来后才会执行.而下一次触发时间则是在s ...

  4. (2015年郑州轻工业学院ACM校赛题) A 彩票

    这是个简单的题目,其实就是判断是否是偶数, 对二进行特判一下就行了! 比赛时候我们还错两次................ 一看简单题就想抢一血,谁知到第一次提交CE, 再提交WA 汗........ ...

  5. poj 1860 Currency Exchange (SPFA、正权回路 bellman-ford)

    链接:poj 1860 题意:给定n中货币.以及它们之间的税率.A货币转化为B货币的公式为 B=(V-Cab)*Rab,当中V为A的货币量, 求货币S通过若干此转换,再转换为原本的货币时是否会添加 分 ...

  6. Java经典编程题50道之十三

    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少? public class Example13 {    public static void main(St ...

  7. Java中的a++和++a的区别

    1.a++和++a的区别 a++表示先将a放在表达式中运算,然后再加1: ++a表示先将a加1,然后再放在表达式中运算 2.实例 (1)Java代码 /** * @Title:JiaJia.java ...

  8. BZOJ_4269_再见Xor_线性基

    BZOJ_4269_再见Xor_线性基 Description 给定N个数,你可以在这些数中任意选一些数出来,每个数可以选任意多次,试求出你能选出的数的异或和的最大值和严格次大值. Input 第一行 ...

  9. Docker 导出&加载镜像

    文章首发自个人网站:https://www.exception.site/docker/docker-save-load-image 本文中,您将学习 Docker 如何导出&加载镜像.当我们 ...

  10. SSM项目思路整合NEW2

    上接于 https://www.cnblogs.com/shijinglu2018/p/10374541.html ...... 三)客户管理模块开发 说明:其实大致思路差不太多,都是首先根据前端页面 ...