如何检测设备在网络浏览器中是否有陀螺仪

How do I detect if a device has a gyroscope in a web browser?

本文关键字:是否 陀螺 浏览器 检测设备 网络      更新时间:2023-09-26

我正在使用THRE.js并创建一个web应用程序,用户可以在其中旋转设备,场景将相应地移动。类似的东西。

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

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

我不知道这是否有帮助,但这里可以看到一个很好的例子来说明如何处理这件事。(按下底部类似轴的图标;你必须在没有陀螺仪和陀螺仪的设备上看到它才能看到区别)。他们对没有陀螺仪的设备所做的只是更新俯仰滚转。使用手机旋转时,偏航不会更新。

所以,这肯定是可能的,但我还没有发现,即使搜索了很多。如果有人能帮忙就太好了。

非常感谢。

编辑:

在只有加速度计的设备上,如MOTO E,所有值都为空-DeviceOrientationEventrotationRate-只有accelerationIncludedingGravity除外。但是,我之前测试的设备没有陀螺仪,但仍然为DeviceOrientationEvent提供α、β、γ值,根据";传感器";有关GSM Arena的详细信息。这就是我怀疑它能够提供DeviceOrientationEvent数据的原因,尽管有噪音。看起来2个加速度计不足以给出旋转速率;)

如果您想检查陀螺仪是否存在,请检查只有陀螺仪才能测量的参数。例如,只有陀螺仪才能测量转速。

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

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

希望这能有所帮助!

编辑:

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

现代解决方案:

if (window.DeviceOrientationEvent) {
  // gyro exist
}