为什么 Windows 8.1 加速计 API 在设备静止时不输出数据?



我正在Windows 8.1超级本上的WinRT中玩C++加速度计API。我惊讶地发现API只在设备运动时更新加速度计数据。如果它静止在桌子上,加速度计的读数不会更新。我尝试通过向Accelerater.ReadingChanged添加事件处理程序来轮询和订阅更新。当设备静止时,不会调用事件处理程序。当设备静止时进行轮询时,我会不断获得相同的旧数据,具有相同的旧时间戳。以下是一些以16毫秒为间隔轮询的样本数据。

130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728
130724777430758219  accel   x: -0.005   y: -0.836   z: -0.728

时间戳是第一列。您可以看到时间戳没有更改。我希望加速度数据不会改变,但很惊讶时间戳没有改变。这不是它在其他平台(iOS、Android)上的工作方式。即使设备静止不动,我也希望在每个样本上看到不同的时间戳。这让我怀疑Windows可能正在对数据进行一些筛选。

有人知道这种行为是否适用于Windows 8.1吗?它可能只针对我的设备型号吗?Windows是否对加速度计数据进行了任何过滤?

事实证明Windows确实在过滤加速度计数据。有一个名为ISensor的COM API,它允许您获取未经过滤的数据。不幸的是,它不是最好的API,也没有很好的文档。下面是一个示例应用程序,说明了它的用途。请注意,为了获得未过滤的数据,必须将传感器的sensor_PROPERTY_CHANGE_SENSITIVITY设置为0。示例应用程序未显示此信息。

最新更新