加速度计是现代智能手机中常见的传感器之一,它能够测量设备在空间中的加速度变化。虽然许多设备都配备了加速度计,但不同设备制造商(OEM)对于如何让开发者访问这些传感器有着不同的策略。目前,只有三星通过其Windows Mobile SDK为开发者提供了访问其设备特定功能的解决方案。HTC虽然未正式提供加速度计支持,但已有开发者通过逆向工程实现了对其加速度计的访问。尽管市场上还有其他设备也配备了加速度计,但关于如何访问它们的文档并不广泛。例如,有多少人知道如何在LG Incite上读取加速度计的数据呢?
目前尚不清楚微软何时会提供统一的加速度计访问API,但ZuneHD的发布可能是一个信号。随着ZuneHD在美国的发布,XNA游戏工作室也进行了更新,这是一个支持前代Zune、Xbox 360和PC的免费托管(基于C#/VB.NET)的开发环境。除了将ZuneHD作为支持目标外,还增加了一些新的类来访问ZuneHD特有的功能,包括加速度计。对这些类很感兴趣,希望它们能提供对未来发展的一些洞见。
在XNA游戏工作室中,Accelerometer
类有两个值得关注的方法:GetCapabilities
和GetState
。总是需要先调用GetCapabilities
方法。它会告诉代码是否运行在具有加速度计的设备上。它返回一个AccelerometerCapabilities
成员。IsConnected
成员让知道加速度计是否可用。三个成员:HasXAxis
、HasYAxis
和HasZAxis
告诉加速度计在哪些轴上检测加速度。对于ZuneHD来说,这三个都是真的。尽管在未来,可能会有不需要所有三个轴的界面(例如方向盘)。如果需要了解加速度计的分辨率或其边界的信息,可以通过成员AccelerometerResolution
、MaximumAcceleration
和MinimumAcceleration
获取这些信息。
可以通过Accelerometer.GetState()
方法获取加速度计的值。它返回一个AccelerometerState
对象。IsConnected
成员让知道是否有可用的加速度计,而Acceleration
是一个Vector3
类型(包含X、Y和Z值的成员,类型为float)。
目前还没有官方的消息。但这是微软提供的加速度计API,觉得值得一看。希望它能让对Windows Mobile 7的预期有所了解。但目前,还不能确定这一点。
以下是使用XNA游戏工作室访问加速度计的示例代码: