为啥 Windows 8.1 加速计 API 在设备静止时不输出数据?
Posted
技术标签:
【中文标题】为啥 Windows 8.1 加速计 API 在设备静止时不输出数据?【英文标题】:Why doesn't Windows 8.1 accelerometer API output data when device is motionless?为什么 Windows 8.1 加速计 API 在设备静止时不输出数据? 【发布时间】:2015-04-02 22:38:00 【问题描述】:我在 Windows 8.1 超极本上使用 WinRT 中的 C++ 加速度计 API。我惊讶地发现 API 仅在设备运动时更新加速度计数据。如果它静止在桌子上,加速度计读数不会更新。我通过向 Accelerometer.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 是否对加速度计数据进行任何过滤?
【问题讨论】:
【参考方案1】:原来 Windows 确实在过滤加速度计数据。有一个名为ISensor 的COM API,允许您获取未经过滤的数据。不幸的是,它不是最好的 API,也没有很好的文档记录。这是一个sample app,说明了它的用途。请注意,为了获得未经过滤的数据,您必须将传感器的set 的SENSOR_PROPERTY_CHANGE_SENSITIVITY 设置为0。示例应用程序没有显示这一点。
【讨论】:
以上是关于为啥 Windows 8.1 加速计 API 在设备静止时不输出数据?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Windows Phone 8 模拟器不能在 Windows 8.1 中运行?
Surface Pro 3 Windows 8.1 的蓝牙 API
为啥重启我的设备后 Windows Phone 8.1 后台任务不起作用?