Windows Phone 的传感器概述

2012/2/9

Windows Phone 支持多个允许应用程序确定设备方向和运动的传感器。这些传感器支持物理设备自身就是一种用户输入方式的应用程序开发。此功能的通常用法包括运动控制的游戏和增强现实的应用程序。对于这些用途中的很多用途,组合运动 API 组合并处理来自所有传感器的输入,它是获取运动和方向信息的最简单方式。对于需要此信息的应用程序,Windows Phone 还提供从各个传感器检索数据的 API。本主题简要概述每个传感器 API。

每个传感器 API 都基于基类 SensorBase<(Of <(<'TSensorReading>)>)> 进行构建并且遵循与启动传感器并获取数据相似的模式。对于每个传感器,都有一个操作方法主题,该主题带您快速完成在应用程序中使用传感器的过程。

警告说明警告:

当应用程序在锁定屏幕下运行时不能使用传感器 API。有关更多信息,请参阅 Windows Phone 空闲检测。也不能在后台代理中使用传感器 API。有关更多信息,请参阅 Windows Phone 的后台代理概述

加速度计测量在某一时刻施加于设备的力。可以使用这些力来确定用户正在向哪个方向移动设备。加速度值采用 3 维矢量表示,该矢量表示在 X、Y 和 Z 轴中的加速度分量(采用重力单位)。当设备面朝平台时,加速度的方向相对于设备以便对 Z 轴应用 -1g,当垂直于平台顶部放置设备时,对 Y 轴应用 -1g。

Accelerometer 传感器检测重力以及由于手机运动而产生的任何力。使用 Motion 类访问的组合运动 API 使用多个设备传感器将重力矢量与设备加速度分离,并且允许您轻松确定设备的当前属性(yaw、pitch、roll)。

可以使用 Compass 或磁力计传感器来确定设备相对于地球磁场北极旋转的角度。应用程序也可以使用原始磁力计读数来检测设备周围的磁力。

罗盘传感器对于所有 Windows Phone 设备来说都不是必需的。设计和实现应用程序时应该考虑此内容,这一点非常重要。应用程序应该始终检查传感器是否可用,如果不可用,是提供备用输入机制还是正常失败。

Gyroscope 传感器用于确定每个轴中设备的旋转速度。您可以使用从陀螺仪传感器获取的值来确定设备在空间中的方向。由于陀螺仪测量旋转速度,而不是角度,因此容易受到与漂移有关的问题的影响。如果您对确定设备属性(yaw、pitch、roll)感兴趣,则应该使用 Motion 而不是陀螺仪 API。

陀螺仪传感器对于所有 Windows Phone 设备来说都不是必需的。设计和实现应用程序时应该考虑此内容,这一点非常重要。应用程序应该始终检查传感器是否可用,如果不可用,是提供备用输入机制还是正常失败。

由于存在物理限制,因此 Windows Phone 很难从传感器的原始数据确定设备的实际方向和运动。例如,加速度计的度数包括作用于设备上的重力以及由设备运动产生的力。陀螺仪传感器测量旋转速度,而不是位置,因此容易漂移。而且,存在复杂的几何计算,即需要将这些传感器的原始数据转换为设备的真实方向。Motion 类处理低级传感器计算并允许应用程序轻松获取设备的飞行姿态(yaw、pitch、roll)、旋转加速度以及由于重力和用户移动的线性加速度。对于使用这种类型数据的典型应用程序(如增强现实的应用程序),建议使用 Motion 类。如果您想采用典型方式使用传感器数据或想实现您自己的运动和方向计算,则可以使用各个传感器类获取每个传感器中的原始数据。

运动 API 可以使用两个不同的传感器配置。通常,“运动”使用罗盘和加速度计传感器,并且不如“增强运动”精确,因为“增强运动”使用罗盘、加速度计和陀螺仪传感器。如果您的应用程序需要“增强运动”的精度,则应该检查以验证其上运行应用程序的设备是否正常陀螺仪传感器。

当用户在 Windows Phone 商城 上查看应用程序时,如果该用户的设备不支持应用程序使用的传感器,则会发出警告。对于加速计、罗盘和陀螺仪,这比较简单 - 如果应用程序使用传感器,但用户的设备不支持该传感器,则用户将收到警告。

如上所述,运动 API 将在至少具有一个罗盘传感器的设备上工作。但是,如果存在陀螺仪,它将产生更好的数据。目前,Windows Phone 商城 使用罗盘传感器来确定设备上是否支持运动 API。如果用户查看使用运动 API 的应用程序并且其设备缺少罗盘,则用户将收到该应用程序需要罗盘传感器的警告。

显示: