写点什么

施炯谈 WP7 设备上的传感器开发

  • 2012 年 7 月 17 日
  • 本文字数:2646 字

    阅读完需:约 9 分钟

在 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 ),获取实时的活动信息!

2012 年 7 月 17 日 09:36831
用户头像

发布了 156 篇内容, 共 44.6 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

我是面试官,我来分享一波面经!看看我的内心OS

比伯

Java 编程 架构 面试 技术宅

什么是堡垒机?为什么需要堡垒机?

xcbeyond

运维

容器化时代到来!跳转机分配问题终于“有救”了

华为云开发者社区

容器 镜像 网络

大厂经验:埋点数据质量之埋点验证

阿亮

埋点 数据验证

打工人、打工魂、高效MES助力打工者都是人上人

Marilyn

敏捷开发 快速开发 MES系统

原创 | 使用JPA实现DDD持久化-只要O,忘记R & Maven配置

编程道与术

Java hibernate 编程 mybatis jpa

30分钟开发一款抓取网站图片资源的浏览器插件

徐小夕

Java chrome 大前端 chrome扩展

视频作品播放量低:自媒体作者如何走出新手村

石头IT视角

架构师训练营 1 期 -- 第十周总结

曾彪彪

极客大学架构师训练营

原创 | 使用JPA实现DDD持久化-数据库连接配置:persistence.xml

编程道与术

Java hibernate 编程 mybatis jpa

moon不讲武德!!!一个类加载机制给面试官说蒙了!!

moon聊技术

Java JVM 类加载 类加载器

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十七)运行测试-在构建工具中运行测试

编程道与术

Java 编程 TDD 单元测试 JUnit

如何基于App SDK快速地开发一个IoT App?

IoT云工坊

App 物联网 sdk 智能家居

马士兵最新2020涵盖P5—P8Java全栈架构师学习路线,跟着老师学我已拿P7Offer!

Java架构追梦

Java 学习 架构 面试 马士兵

基于DAYU的实时作业开发,分分钟搭建企业个性化推荐平台

华为云开发者社区

华为 算法 数据 dayu

程序员面试的时候突然遇到答不上的问题怎么办?

Java架构师迁哥

为什么程序员不做外包

Java架构师迁哥

Web前端如何实现断点续传

QiLab

Web 断点续传 upload pl

云原生应用Go语言:你还在考虑的时候,别人已经应用实践

华为云开发者社区

微服务 云技术 Go 语言

如何用CSS实现图像替换链接文本显示并保证链接可点击

陈北

CSS小技巧

有奖话题 | 如果程序员和产品经理都会凡尔赛文学,将如何对话?

YourBatman

话题讨论 凡尔赛文学

《迅雷链精品课》第七课:以太坊数据存储分析

迅雷链

区块链

英特尔与南京溧水经济技术开发区共同成立智能交通研究院

新闻科技资讯

双指针算法和位运算&离散化和区间合并

落曦

申通快递 双11 云原生应用实践

阿里巴巴云原生

阿里云 Kubernetes 运维 云原生 监控

LeetCode题解:169. 多数元素,分治,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

纷享销客罗旭:拐点下的中国SaaS

ToB行业头条

SaaS

接口请求(get、post、head等)详解

测试人生路

HTTP

大厂都是怎么用Java8代替SimpleDateFormat?

Java架构师迁哥

性能测试界“网红”云性能测试服务,了解一下?

华为云开发者社区

CloudTest 沙箱实验 云性能测试

在线K歌的发展和优势

anyRTC开发者

音视频 WebRTC RTC sdk

施炯谈WP7设备上的传感器开发-InfoQ