deviceMotion rotationRate在iOS 13.4上为空。

问题描述 投票:1回答:1

从iOS 11开始,我在Safari上使用devicemotion事件来访问陀螺仪。


历史。

  • 在iOS 11 12上,陀螺仪的访问是开放的,只需要监听devicemotion事件。
  • 从iOS 12.2开始,苹果已经阻止了陀螺仪的访问,你需要在safari设置中激活一个选项。
  • 从iOS 13开始,苹果实现了 "DeviceOrientationEvent.requestPermission "来询问陀螺仪的访问权限,当用户同意时,devicemotion事件中的 "rotationRate "键有alpha beta gamma值(同意前,值为空)。


问题 :

在iOS 13.4上,我这边没有修改代码,在我所有使用该功能的项目中,即使用户同意陀螺仪访问,rotationRate也总是为空。


我搜索了苹果的官方答案,但没有任何可用的答案。它看起来像一个bug,但也许我这边的实现是错误的?


很高兴知道我的代码。

首先,我监听devicemotion事件(rotationRate为null),当界面准备好,用户点击一个按钮,陀螺仪访问要求和rotationRate有值。



有什么好办法吗?



javascript ios gyroscope
1个回答
0
投票

这似乎是iOS 13.4中的一个bug,因为连 webxr polyfill 未能检测到哪个能力有设备,因为他们有(第3770行)。

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

该条件评估为false,所以使用devicemotion,然后... rotationRateaccelerationIncludingGravity 都是空的。

所以我认为从现在开始的解决方法是监听devicemotion事件而不是devorientation事件,即使事先已经申请了权限,但这是必须的。

© www.soinside.com 2019 - 2024. All rights reserved.