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

目标平台设为Windows.Universal Targeting Windows.Universal


微软过去几年平台一直在变革,所以开发者往往会有不同的起点,所以下面会给出一些指南,来帮助不同起点的开发者顺利的迁移代码带UWP平台上。

不同的起点 Starting Points

这几年大家接触的Windows平台会有很多,下面分别提供针对他们的指引。

起点

AppX Manifest清单目标平台

如何迁移到UWP?
Windows Phone (Silverlight) Silverlight App Manifest清单 Migrate to WinRT
Windows Phone 8.1 Universal 不包含目标平台的8.1 AppX Manifest清单 Migrate your app to the Universal Windows Platform
Windows Store 8 不包含目标平台的8 AppX Manifest清单 Migrate your app to the Universal Windows Platform
Windows Store 8.1 Universal 不包含目标平台的8.1 AppX Manifest清单 Migrate your app to the Universal Windows Platform

修改目标平台为Windows.Universal Change your Target to Windows.Universal

按照指引文档适配后,你的应用可以运行与UWP平台上啦,包括手机、PC、XBox和HoloLens等等。

现在让我们打开 AppX的项目清单文件,确保你的UWP应用可以在HoloLens上运行。

  • 打开你的VS项目,导航到清单文件
  • 右键Package.appxmanifest清单文件,选择

  • 确保在<Dependencies>节下的目标平台是Windows.Universal
<Dependencies>
<TargetDeviceFamily Name="Windows.Universal" MinVersion="10.0.10240.0" MaxVersionTested="10.0.10586.0" />
</Dependencies>
  • 保存清单文件

你可以使用任何文本编辑器来修改此清单文件,效果都一样。

在模拟器上运行应用 Run in the HoloLens Emulator

现在你可以直接生成项目并在HoloLens模拟器上运行你的应用。

  • 选择HoloLens模拟器作为部署目标

  • 开始在模拟器上进行调试
  • 你可以使用键盘鼠标来模拟HoloLens的操作,来测试你的应用

后续步骤 Next Steps

启动应用时可能会出现以下两种情况:

  1. 应用在被放置好后显示闪屏图片后立即运行,这表示一切正常。
  2. 应用在被放置好后出现载入动画,最后仍然只显示闪屏图片,这说明你的应用启动时发生错误,需要解决。

如何调试 How to debug


HoloLens是新出现的Windows 10设备,所以许多UWP API在HoloLens上仍处于测试和开发阶段。下面是一些我们发现的问题:

  • 应用启动时不支持文件系统查询操作
  • 使用Web认证代理或Web客户经理以外的传统认证方式
  • 启动时会较深入的查询硬件设备
  • 启动时会使用日历、联系人、协议等API
  • 使用一些大的第三方库可能会导致不能通过HoloLens上的审核

为搞明白是什么原因导致你的应用不能正常启动,你需要进行调试。

通过调试器运行应用 Running your UWP app in the debugger

调试步骤很简单,通过菜单Debug > Start Debugging即可。

  • 如果应用发生未处理异常会第一时间被调试器捕获,VS里会显示相关的异常信息。如果你已经在应用里使用try catch做了异常捕获处理,那么异常信息可以被你的代码获取到,可以像下图那样显示出来。

  • 你也可以通过打断点单步调试来详细定位到问题代码块,一般来讲可以解决大部分问题。

了解应用错误的原因 Understanding the failure

正如上文提到的,HoloLens开发者版存在一些由测试和开发中的API导致的已知问题。如果你的应用使用了潜在问题API列表中的API,那么可以通过Windows Feedback工具反馈给微软。

如何打开Windows Feedback工具

  1. 手势唤出开始菜单
  2. 打开Windows Feedback应用
  3. 选择Developer Platform,然后发送出错细节给微软

微软会持续地修复UWP API的问题。但是对于一些因为设计时就不支持HoloLens的API,下面是一些可能有帮助的解决模式:

错误码 Error codes

  • 不应该返回一个特殊的HRESULT错误,因为这个API目前还没完善。 相反,API应通过使用空集合,布尔返回值,显式状态代码等抛出错误信息。请注意,如果API已经由于编程错误(例如传递无效参数)而返回HRESULT,则它将 继续酌情返还这些错误。

集合 Collections

  • 当我们使用属性索引器或者方法的返回值是集合时,不应该简单地直接返回一个null对象,而最好返回一个数量为0的集合对象。
  • 在一些罕见的情况下,API会暴露一个可读/写的集合类型属性,允许应用程序提供自己的值。 在这些情况下,如果API在完全功能的情况下已经返回null,它应该在部分功能的情况下继续返回null。 注意,这是一个API设计的反模式,大多数UWP API一般不应该遵循它。

异步方法 Asynchronous functions

  • 不应该从Async异步方法返回空IAsyncAction或IAsyncOperation结果。 相反,它们将返回已经处于任务完成状态并具有适当结果(空集合,状态代码等)的有效对象。

事件 Events

  • 事件不应该失败或者忽略事件注册行为。相反,API应该接受事件注册/取消事件注册,但绝不会引发事件。 API必须持有任何已注册的事件处理程序(而不是默默地忽略它们),因为应用程序可能无意中依赖注册的事件进行生命周期管理。

更新UI Update your UI


现在你的应用在HoloLens中以2D面板的形式展示在世界中,我们下面应该让我们的应用看起来更漂亮。下面使一些要考虑的内容:

  • HoloLens将以固定分辨率和DPI运行所有2D应用,相当于853x480有效像素。 考虑你的设计是否需要在这个比例下进行细化,并考虑查看我们的2D UI指南,来提高用户体验。
  • HoloLens不支持2D动态磁贴。 如果您的核心功能显示活动磁贴上的信息,请考虑将该信息移回应用程序。
  • HoloLens不支持共享合同,2D打印,全屏模式,投射和可能在您的应用程序中的其他功能。

新的输入可能性 New input possibilities


HoloLens使用先进的深度传感器感知世界和用户。 这使得高级手势得以使用,如bloom和air-tap手势。 强大的麦克风还确保了较好的语音体验。 HoloLens负责处理UWP应用的所有复杂内容,将您的Gaze和手势抽象并转换为常规UWP输入机制的指针事件。 例如,HoloLens Clicker模拟Air-Tap手势,但2D应用程序不需要知道输入来自哪里,它们只知道发生了指针点击事件。
以下是将UWP应用迁移到HoloLens时应了解的关于输入方式的高级概念/方案:

  • 当用户注视应用时,Gaze会触发鼠标悬停事件,可能意外地触发菜单,弹出窗口或其他用户界面元素,
  • 凝视不如鼠标输入那么精确。 对HoloLens应该使用适当大小的点击目标,类似于触摸友好的移动应用的UI。 应用UI边缘附近的小元素特别难以与之交互。
  • 用户必须可以在应用中切换输入模式,从滚动到拖动到两个手指平移手势。 如果您的应用是为触摸输入设计的,请考虑确保没有主要功能只依赖手势。 如果是,请考虑使用其他输入机制,例如可以启动手指平移手势的按钮。 例如,地图应用程序可以使用两个手指平移进行缩放,但具有加号,减号和旋转按钮,以模拟与单次点击相同的缩放交互。

语音输入是HoloLens体验的关键部分。 我们已经启用了在Windows 10中的所有语音API为HoloLens上的Cortana提供支持。

发布和维护你的UWP应用 Publish and Maintain your Universal app on HoloLens


一旦你的应用可以正常运行,那么你就可以打包它并将它上传到应用商店中

HoloLens开发手记 - 构建2D应用 Building 2D apps的更多相关文章

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

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

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

    HoloLens使用Universal Windows Platform (UWP)提供的应用模型.UWP应用模型定义了应用如何被安全和完全地安装.更新.版本控制和移除.它管理了应用生命周期 - 应用 ...

  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开发手记 - 使用HoloLens模拟器 Using HoloLens emulator

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

  6. HoloLens开发手记 - Unity development overview 使用Unity开发概述

    Unity Technical Preview for HoloLens最新发行版为:Beta 24,发布于 09/07/2016 开始使用Unity开发HoloLens应用之前,确保你已经安装好了必 ...

  7. HoloLens开发手记 - 手势输入 Gesture input

    手势是HoloLens三个首要输入形式之一.一旦你使用凝视定位了一个全息图像,手势允许你与它交互.手势输入允许你使用手或者点击器原生地与全息图像交互. 手势之外,你也可以在应用中使用语音输入来交互. ...

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

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

  9. HoloLens开发手记-全息Hologram

    HoloLens使我们可以通过周边世界的光线和声音来创建全息场景和物体,使得它们像真实物体那样.全息场景能够响应你的凝视.手势和语音指令,同时还会和你周边世界的表面交互.借助全息场景,你可以在周边世界 ...

随机推荐

  1. Spring自学教程-声明式事务处理(六)

    Spring事务处理分两种: 一.编程式事务:在程序中控制事务开始,执行和提交: 1.1 使用TransactionTemplate, 使用回调函数执行事务,不需要显示开始事务,不需要显示提交事务,但 ...

  2. Android面试题随笔1

    1.如何让一个应用在手机上产生两个或多个图标? 在清单文件中的activity节点下配置如下:[5,7行代码] <activity android:name=".MainActivit ...

  3. 《数据结构与算法分析:C语言描述》读书笔记------练习1.1 求第K大的数

    求一组N个数中的第k个最大者,设k=N/2. import java.util.Random; public class K_Max { /** * @param args */ //求第K大的数,保 ...

  4. 用OpenSSL生成自签名证书在IIS上搭建Https站点(用于iOS的https访问)

    前提: 先安装openssl,安装有两种方式,第一种直接下载安装包,装上就可运行:第二种可以自己下载源码,自己编译.这里推荐第一种. 安装包:http://slproweb.com/products/ ...

  5. ucos任务控制块详解

    Ucos实现多任务的基础包括几个方面:任务控制块,任务堆栈,中断,任务优先级,一一说起 首先,任务控制块的结构如下 //系统在运行一个任务的时候,按照任务的优先级获取任务控制块,再在任务堆栈中获得任务 ...

  6. 单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等(转)

    源:单片机modebus RTU通信实现,采用C语言,可适用于单片机,VC,安卓等 //modebus_rtu.c /***************************************** ...

  7. IOS开发之IOS8.0最新UIAlertController

    最近苹果更新的IOS8 对以前进行了很大的修改, 更新的API也让人捉急,据说iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.比如全新的UIPrese ...

  8. UVa 10945 - Mother bear

    题目大意:给一个字符串,判断是否回文(忽略大小写,忽略非字母字符). #include <cstdio> #include <cctype> #include <cstr ...

  9. css(二) block,inline和inline-block概念和区别

    转: http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-leve ...

  10. 关于Apache,Mysql,PHP之间的关系

    声明:以下为作者原创,转载请注明文章来源地址. 通过百度百科我们知道 Apache(全称Apache HTTP Server):是世界使用排名第一的Web服务器软件.可以在大多数计算机操作系统中运行, ...