在7月5日,由天翼空间·开发者工厂主办,InfoQ协助策划的第十一期专家讲坛活动上,来自Windows Embedded方向MVP施炯( @浙万院电信物联网专业-施炯)向开发者介绍了WP7设备传感器开发的相关知识,主要谈到了Accelerometer类、Compass类和Gyroscope类的使用,Motion API的使用,并针对开源控件AccelerometerHelper、Shake Gesture Library进行了分享。
Sensors On WP7(讲稿下载)
分享主要包含WP7设备传感器设备简介,如何使用Accelerometer、Compass和Gyroscope,实例项目Running Mate实践等。
WP7设备上包含的传感器主要有加速计(Accelerometer)、麦克风(Microphone)、A-GPS、摄像头(Camera)、罗盘(Compass)、陀螺仪(Gyroscope)。
加速计主要用来检测手机受到的加速度大小和方向,手机静置时只受到重力加速度影响,所以又有人把加速计功能又叫做重力感应功能。WP7里的加速度计也能够响应手机的突然移动,比如颤动或突然晃动,可以用来仿真骰子或其他类型的随机运动。加速计通常有三个轴(x,y,z),同时遵循笛卡尔右手坐标体统。在开发过程中,需要注意Landscape分为左Landscape模式和右Landscape模式。
罗盘也称之为磁力计,主要用来测试磁场强度和方向,磁力计的强项在于定位设备的方位。可以测量出当前设备与东南西北四个方向上的夹角。磁力计主要提供了以下层面的数据:
- HeadingAccuracy:方向指示的精度
- MagneticHeading:与地磁北极的偏角
- TrueHeading :与地理北极的偏角
- MagnetometerReading:从磁力计得到的原始数据,以微特斯拉为单位
由于受到外部电磁场的干扰,会使得手机的Compass数据精度降低,在这种情况下,我们必须提示用户远离磁场干扰,并且对Compass进行校准。在Windows Phone 7上,与CurrentValueChanged一样,OS为Compass提供了校准事件处理compass_Calibrate。在OS检测到heading accuracy的绝对值大于20度时,就会触发该事件。在对Compass进行校准时,一般显示一个图片,提示用户对手机进行绕“8”字移动。
陀螺仪就是内部有一个陀螺,它的轴由于陀螺效应始终与初始方向平行,这样就可以通过与初始方向的偏差计算出实际方向。手机里陀螺仪实际上是一个结构非常精密的芯片,内部包含超微小的陀螺。陀螺仪测量是参考标准是内部中间在与地面垂直的方向上进行转动的陀螺。通过设备与陀螺的夹角得到结果。陀螺仪的强项在于测量设备自身的旋转运动。对设备自身运动更擅长。但不能确定设备的方位。
Motion API所做的事情,其实质就和GPSID类似。在应用程序开发过程中,如果开发者获取原始的传感器数据,然后对其数据进行分析,从而去判断手机的姿态和移动方向,这样一个处理流程确实有点复杂,而且有时候也很难处理,如加速度传感器的返回值中,不仅仅包含了手机移动的加速度,还包括了重力加速度(事实上,在Windows Phone OS 7.0上,处理加速度传感器时,我们的确是需要经历上面的过程)。
因此,在Windows Phone OS 7.1(Mango)中,引入了Motion API,用它来对底层的传感器数据进行分析和处理,从而得到开发者需要的信息,如设备的姿态(yaw, pitch, and roll)、旋转加速度和线性加速度。需要注意的是,一代的Windows Phone 7手机没有开放Motion API。因此,如果想要在Windows Phone OS 7.0上写基于Motion的应用程序,那是无法实现的。但是,自从这个月初微软提供了Mango升级以后,很多设备厂商都对其生产的WP7推送了Mango更新。在OS升级以后,有些设备就提供了对Motion API的支持。
此外,在分享过程中,施炯还罗列了开发中的一些注意点:
- WP7 OS 7.0和7.1的加速度传感器数据获取方法差异:ReadingChanged vs CurrentValueChanged
- 硬件限制因素,如Focus返回的最大加速度为2g
- 传感器数据更新的时间间隔:TimeBetweenUpdates Interval
- Accelerometer:20 ms
- Compass:25 ms
- Gyroscope:5 ms
- Motion:17 ms
- Compass与Gyro返回的数值不同:Compass返回角度,Gyro返回弧度
在问答环节,施炯回答了网友的提问,详细信息如下:
问:Windows Phone都有哪些传感器接口?是不是所有Windows Phone都具有这些传感器?
答:Windows Phone主要的传感器包括加速度传感器、数字罗盘、陀螺仪等等。需要注意的是,并不是任何一个WP7手机都支持这些传感器。比如,Compass并不是必须的。换句话说,微软并没有对其进行强制规定,硬件厂商可以根据自己的意愿来选择是否对其生产的Windows Phone 7设备加入数字罗盘的支持。例如,对于我的三星Focus i917而言,它支持加速度传感器和Compass,但是却并不支持Gyro。问:WP传感器都可以用来哪些相关类型应用软件的开发,是否需要外界硬件设备的支持?
答:WP传感器比较多,可以用到很多应用中,有游戏、工具等等。开发这些应用,首先要确保你的手机支持这些传感器,这样才能调试。目前SDK的模拟器中,只给出了加速度传感器的模拟。问:Windows Phone RTM版本和Windows Phone Mango版本有什么不同呢?
答:RTM就是OS 7.0,Mango就是OS 7.1。问:PhoneGap是否提供了对传感器的支持?
答:PhoneGap支持加速度传感器和数字罗盘,具体信息可参考:Getting Started with Windows Phone。问:基于陀螺仪API可以开发哪些类型的wp7应用呢?感觉对陀螺仪的作用和相关应用还是不太明白?
答:陀螺仪的数据反映了手机在三个轴方向的旋转加速度。相对而言,我觉得Motion API中的三个姿态更加有用。
关于讲师
施炯,新浪微博账号@浙万院电信物联网专业-施炯,毕业于北京邮电大学信息与通信工程学院,获工学博士学位,曾任Microsoft Windows Phone/Mobile MVP,现任Windows Embedded方向MVP,微软中文技术论坛(MSDN)版主,业余的兴趣爱好为嵌入式系统,特别是基于Windows Phone、Windows Mobile和Windows Embedded平台的应用开发。其博客地址:http://www.cnblogs.com/dearsj001/。
关于专家讲坛
天翼空间开发者社区专家讲坛是天翼空间开发者社区(www.189works.com)2012年针对开发者推出的一项提升专业能力的系列讲座,每周四晚,邀请移动互联网开发领域的权威专家,通过语音频道专题讲座,线上论坛访谈,以及微博、QQ群线上同步直播的形式,为社区的开发者用户提供系统的技术讲座,答疑,以及运营知识方面的培训。
往期内容回顾
关于专家讲坛更多详情,请浏览官方网站。InfoQ也会对后续的活动进行跟踪报道。
关于社区活动的更多详情,欢迎查看InfoQ维护的社区活动日历,也欢迎关注InfoQ官网微博(@InfoQ),获取实时的活动信息!