Sensors

传感器让你的应用知道设备与周围物理世界之间的关系。 传感器可以告知应用设备的方向、方向和移动。 这些传感器可以通过提供独特的输入形式(例如,使用设备动作来排列屏幕上的字符或模拟驾驶舱中,并将设备用作方向盘)来帮助使游戏、增强现实应用或实用工具应用更加有用和交互。

根据一般规则,从一开始就决定你的应用是否完全依赖于传感器,或者传感器是否只提供额外的控制机制。 例如,使用设备作为虚拟方向盘的驾驶游戏也可以通过屏幕 GUI 进行控制 - 这样,应用就可以工作,而不管系统上可用的传感器如何。 另一方面,弹珠倾斜迷宫可以编码为仅适用于具有适当传感器的系统。 必须做出是否完全依赖传感器的战略选择。 请注意,鼠标/触摸控制方案将沉浸于更大的控制。

主题 说明
校准传感器 基于磁力计(指南针、测斜仪和方向传感器)的设备中的传感器可能会因环境因素而需要校准。 磁力计Accuracy 枚举可以帮助确定设备需要校准时的操作过程。
传感器方向 OrientationSensor 类中的传感器数据由其引用轴定义。 这些轴由设备的横向定义,并在用户旋转时随设备旋转。
使用加速计 了解如何使用加速计响应用户移动。
使用指南针 了解如何使用指南针确定当前方位。
使用陀螺仪 了解如何使用陀螺测试仪检测用户移动变化。
使用测斜仪 了解如何使用测斜仪确定俯仰、滚转和偏航。
使用光传感器 了解如何使用氛围光传感器检测照明变化。
使用方向传感器 了解如何使用方向传感器来确定设备方向。

传感器批处理

某些传感器支持批处理的概念。 这将因可用的单个传感器而异。 当传感器实现批处理时,它会在指定的时间间隔内收集多个数据点,然后一次传输所有数据。 这与正常行为不同,传感器在执行读取时立即报告其发现情况。 请考虑下图,其中显示了如何收集数据,然后传递数据,先是正常传递,然后是批量传递。

传感器批处理集合

传感器批处理的主要优势是延长电池使用时间。 如果未立即发送数据,则会节省处理器电源,并防止数据需要立即处理。 系统的某些部分可以休眠,直到需要它们,这可以节省大量电力。

可以通过调整延迟来影响传感器发送批的频率。 例如,Accelerometer 传感器具有 ReportLatency 属性。 为应用程序设置此属性时,传感器将在指定的时间量之后发送数据。 可以通过设置 ReportInterval 属性来控制通过给定延迟累积的数据量。

在设置延迟方面,需要注意几个注意事项。 第一个注意事项是,每个传感器都有一个 MaxBatchSize ,它可以基于传感器本身提供支持。 这是传感器在强制发送事件之前可以缓存的事件数。 如果将 MaxBatchSize 乘以 ReportInterval,则确定最大 ReportLatency 值。 如果指定的值高于此值,将使用最大延迟,以免丢失数据。 此外,每个应用程序都可以设置所需的延迟。 为了满足所有应用程序的需求,将使用最短的延迟期。 由于这些事实,在应用程序中设置的延迟可能与观察到的延迟不匹配。

如果传感器正在使用批处理报告,调用 GetCurrentReading 将清除当前数据批次并启动新的延迟期。

加速计

加速计传感器沿设备的 X、Y 和 Z 轴测量 G 力值,非常适合简单的基于运动的应用程序。 请注意,G 力值包括重力导致的加速。 如果设备在表中具有 FaceUpSimpleOrientation,则加速计将在 Z 轴上读取 -1 G。 因此,加速计不一定只测量坐标加速 - 速度变化率。 使用加速计时,请确保将引力矢量与重力和线性加速矢量与运动区分开来。 请注意,对于固定设备,引力向量应规范化为 1。

下图说明了:

  • V1 = 矢量 1 = 重力导致的力
  • V2 = 矢量 2 = 设备底盘的 -Z 轴 (屏幕背面的点)
  • Øi = 倾斜角度 (倾斜) = 设备底盘的 –Z 轴与重力矢量之间的角度

加速计加速计度量

使用加速计传感器的应用包括一个游戏,其中屏幕上的弹珠向倾斜设备的方向滚动(引力矢量)。 这种类型的功能与测斜仪的功能紧密相镜像,还可以通过使用俯仰和滚筒的组合来使用该传感器完成。 使用加速计的重力矢量通过为设备倾斜提供一个易于数学操作的矢量来简化这一点。 另一个示例是当用户通过空气(线性加速矢量)轻扫设备时发出鞭子破解声音的应用。

有关示例实现,请参阅 加速计示例

活动传感器

活动传感器确定附加到传感器的设备当前状态。 此传感器经常用于健身应用程序,以跟踪携带设备的用户在运行或行走时。 有关此传感器 API 可以检测到的可能活动的列表,请参阅 ActivityType

有关示例实现,请参阅 活动传感器示例

高度表

Altimeter 传感器返回一个值,该值指示传感器的高度。 这使你能够跟踪海拔高度的变化,以距离海平面的米为单位。 一个可能使用此应用的示例是运行的应用,用于跟踪运行过程中的提升变化,以计算燃烧的卡路里。 在这种情况下,可以将此传感器数据与 活动 传感器相结合,以提供更准确的跟踪信息。

有关示例实现,请参阅 altimeter 示例

Barometer

Barometer 传感器使应用程序能够获取对称读数。 天气应用程序可以使用此信息来提供当前的大气压力。 这可用于提供更详细的信息并预测潜在的天气变化。

有关示例实现,请参阅 晴雨表示例

Compass

指南针传感器根据地球的水平平面返回相对于磁北的二维方向。 指南针传感器不应用于确定特定设备方向或表示 3D 空间中的任何内容。 地理特征可能会导致标题的自然下降,因此某些系统同时支持 HeadingMagneticNorthHeadingTrueNorth 考虑你的应用首选哪个应用,但请记住,并非所有系统都会报告真正的北方值。 陀螺仪和磁力计(测量磁力量级的设备)传感器结合了其数据来生成指南针标题,它具有稳定数据的净效果(由于电气系统组件,磁场强度非常不稳定)。

磁北极的指南针读数

想要显示指南针玫瑰或导航地图的应用通常使用指南针传感器。

有关示例实现,请参阅 指南针示例

Gyrometer

陀螺仪传感器测量 X、Y 和 Z 轴的角速度。 这些在简单的基于运动的应用中非常有用,这些应用不关心设备方向,而是关心以不同速度旋转的设备。 陀螺仪可能会受到数据干扰或沿一个或多个轴的常量偏差。 应查询加速计,以验证设备是否在移动,以确定陀螺仪是否遭受偏差,然后在应用中相应地进行补偿。

带俯仰、滚和偏航的陀螺仪

使用陀螺仪传感器的应用示例是一款基于设备的快速旋转旋转轮盘的游戏。

有关示例实现,请参阅 陀螺仪示例

Inclinometer

测斜仪传感器指定设备的偏航、俯仰和滚滚值,并最适合关心设备在空间中的位置的应用。 俯仰和滚动是通过采用加速计重力矢量和集成陀螺仪中的数据来派生的。 Yaw 是从磁力计和陀螺仪(类似于指南针方向)数据建立的。 测斜仪以易于消化和可理解的方式提供高级方向数据。 如果需要设备方向,但不需要操作传感器数据,请使用测斜仪。

带俯仰、滚滚和偏航数据的测斜仪

更改其视图以匹配设备方向的应用可以使用测斜仪传感器。 此外,显示与设备偏航、俯仰和滚轮匹配的飞机的应用也将使用测斜仪读数。

有关实现的示例,请参阅测斜仪示例 https://github.com/Microsoft/Windows-universal-samples/tree/main/Samples/Inclinometer

光传感器

传感器能够确定传感器周围的环境光。 这使应用能够确定设备周围的光线设置何时发生更改。 例如,具有石板设备的用户可能会在阳光明媚的一天从室内走到户外。 智能应用程序可以使用此值来增加背景和呈现字体之间的对比度。 这将使内容在更明亮、更明亮的户外环境中仍然可读。

有关示例实现,请参阅 光传感器示例

方向传感器

设备方向通过四元数和旋转矩阵表示。 OrientationSensor 在确定设备在绝对标题方面如何位于空间中时提供高度的精度。 OrientationSensor 数据派生自加速计、陀螺仪和磁力计。 因此,测斜仪和指南针传感器都可以从四元数值派生。 四元数和旋转矩阵非常适合高级数学操作,通常用于图形编程。 使用复杂操作的应用应该有利于方向传感器,因为许多转换基于四元数和旋转矩阵。

方向传感器数据

方向传感器通常用于高级增强现实应用,这些应用根据设备背面指向的方向在周围绘制覆盖层。

有关示例实现,请参阅 方向传感器示例

计步器

Pedometer 传感器跟踪携带已连接设备的用户所执行的步骤数。 传感器配置为跟踪给定时间段内的步骤数。 多个健身应用程序,例如跟踪为帮助用户设置和达到各种目标而采取的步骤数。 然后,可以收集和存储此信息以显示随时间推移的进度。

有关示例模拟,请参阅 计生计示例

邻近感应传感器

邻近感应传感器可用于指示传感器是否检测到对象。 除了确定对象是否在设备范围内外,邻近感应传感器还可以确定与检测到的对象之间的距离。 一个示例,其中可以将其与希望在用户进入指定范围时从睡眠状态中浮出水面的应用程序一起使用。 设备可能处于低功率睡眠状态,直到邻近感应传感器检测到某个对象,然后才能进入更活跃的状态。

有关示例实现,请参阅 邻近感应传感器示例

简单方向

SimpleOrientationSensor 可检测指定设备的当前象限方向,或者它是面对面或面对面的。 它具有六种可能的 SimpleOrientation 状态(NotRotatedRotated90、Rotated180、Rotated270FaceUpFaceDown)。

基于保持并行或垂直于地面的设备更改其显示器的读取器应用将使用 SimpleOrientationSensor 中的值来确定设备的保存方式。

有关示例实现,请参阅 简单的方向传感器示例