javascript - 在iOS 13.4上deviceMotion rotationRate为null

标签 javascript ios gyroscope

自iOS 11起,我使用devicemotion事件在Safari上访问陀螺仪。

历史:

  • 在iOS 11/12上,陀螺仪访问已打开,只需要侦听devicemotion事件。
  • 从iOS 12.2开始,Apple阻止了陀螺仪的访问,您需要激活Safari浏览器设置
  • 的选项
  • 从iOS 13开始,Apple已实现“DeviceOrientationEvent.requestPermission”以询问陀螺仪访问,并且当用户同意时,devicemotion事件具有键“rotationRate”,且具有alpha / beta / gamma值(在同意之前,该值为null)。

  • 问题:

    在iOS 13.4上,并且我使用此功能的所有项目都没有代码更改,即使用户同意陀螺仪访问,rotationRate始终为null。

    我从Apple搜寻了官方的答案,但没有资料。
    它看起来像个错误,但也许我这边的实现是错误的?

    很高兴知道我的代码:

    首先,我监听devicemotion事件(rotationRate为null),当界面准备就绪时,用户单击按钮,要求陀螺仪访问,并且rotationRate具有值。

    有任何想法吗 ?

    最佳答案

    这似乎是iOS 13.4中的错误,因为即使webxr polyfill也无法检测到设备具有的功能,因为它们具有(第3770行):

    if (this.isWithoutDeviceMotion) {
      window.addEventListener('deviceorientation', this.onDeviceOrientationCallback_);
    } else {
      window.addEventListener('devicemotion', this.onDeviceMotionCallback_);
    }
    

    条件评估为false,因此使用devicemotion,然后rotationRateaccelerationIncludingGravity均为空。

    因此,我认为从现在开始的解决方法是监听deviceorientation事件,而不是devicemotion,即使事先已经请求了权限,这还是必须的。

    关于javascript - 在iOS 13.4上deviceMotion rotationRate为null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61339598/

    相关文章:

    javascript - onKeyDown 会在各处触发,而不仅仅是在一页上触发

    javascript - 如何在 Symfony2 中正确使用 AJAX

    iphone - 我如何在cocos2d中使用瓦片坐标而不是常规坐标

    arduino - 从 MPU-9250 获取航向/方向

    javascript - Firefox 4 和特殊字符的 Keycode

    javascript - 滚动到 div 时 JS 计数器停止计数

    iOS:CNContactPicker didSelect - 如何确定所选属性的类型?

    iOS检测UIButton Press Dynamic索引

    iphone - iPhone 上的陀螺仪

    java - Android:同时从加速度计和陀螺仪获取数据