如何检测设备是不是在 Web 浏览器中有陀螺仪?

Posted

技术标签:

【中文标题】如何检测设备是不是在 Web 浏览器中有陀螺仪?【英文标题】:How do I detect if a device has a gyroscope in a web browser?如何检测设备是否在 Web 浏览器中有陀螺仪? 【发布时间】:2016-02-23 08:13:37 【问题描述】:

我正在使用 THREE.js 并创建一个网络应用程序,用户可以在其中旋转设备,并且场景将相应移动。类似于this。

我在区分带有陀螺仪和不带有陀螺仪的设备时遇到了问题。

检测根本没有方向传感器的设备很容易。 DeviceOrientationEvent 的所有 alpha、beta、gamma 值均为空。但是,如果移动设备没有陀螺仪,它仍然会在 DeviceOrientationEvent 中给出 alphabetagamma 值强>。问题是这些值非常嘈杂,并在场景中造成大量抖动。所以,我想禁用这些设备的设备方向。但是,到目前为止,我还没有找到如何确定数据是来自陀螺仪还是加速度计(这是我对数据来自哪里的猜测)。

我不知道它是否有帮助,但是可以在 here 看到一个很好的例子来说明如何处理这个问题。 (按底部的轴状图标;您必须在没有陀螺仪和陀螺仪的设备上看到它才能看到差异)。他们对没有陀螺仪的设备所做的只是更新 pitchrollyaw 不会在您随手机旋转时更新。

所以,这绝对是可能的,但即使经过大量搜索,我还没有发现如何。如果有人能提供帮助,那就太好了。

非常感谢。

编辑:

在只有加速度计的设备上,例如 MOTO E,所有值都为空 - DeviceOrientationEventrotationRate - 唯一的例外是加速度包括重力。但是,我之前测试的设备没有陀螺仪,但仍然为 DeviceOrientationEvent 提供 alpha、beta、gamma 值,根据 @ 似乎有 2 个加速度计987654323@。这就是我怀疑它能够提供 DeviceOrientationEvent 数据的方式,尽管 嘈杂。看起来 2 个加速度计不足以提供旋转速率;)

【问题讨论】:

【参考方案1】:

如果要检查是否存在陀螺仪,请检查只有陀螺仪可以测量的参数。例如,旋转速度是只有陀螺仪才能测量的。

看一下说明陀螺仪是否存在的示例代码:

var gyroPresent = false;
window.addEventListener("devicemotion", function(event)
    if(event.rotationRate.alpha || event.rotationRate.beta || event.rotationRate.gamma)
        gyroPresent = true;
);

希望这会有所帮助!

编辑:

请注意:这里使用 DeviceMotionEvent 是因为只能从该事件中访问rotationRate(和加速度等)。 OP 只尝试了 DeviceOrientationEvent,因此值得一提。

【讨论】:

哇!这创造了奇迹...... :D 非常感谢!我没想过检查任何其他事件。我在互联网上找不到任何东西来解决这个问题。再次感谢。【参考方案2】:

现代解决方案:

if (window.DeviceOrientationEvent) 
  // gyro exist

source

【讨论】:

它不工作。在没有陀螺仪的桌面浏览器中试试这个。你会得到真实的。

以上是关于如何检测设备是不是在 Web 浏览器中有陀螺仪?的主要内容,如果未能解决你的问题,请参考以下文章

地空导弹攻击时的陀螺仪的原理是啥,又是怎么工作的?所有的导弹都有吗?

使用加速度计、陀螺仪和指南针计算设备在 3D 世界中的运动

如何使用加速度计进行手势识别

检测 iPhone 移动是不是改变方向?

Android 检测运动

HTML5摇一摇,如何判断设备摇动 – H5陀螺仪