iOS 13.4 上的 deviceMotion rotationRate 为空
deviceMotion rotationRate is null on iOS 13.4
我从 iOS 11 开始就使用 devicemotion 事件访问 Safari 上的陀螺仪。
历史:
- iOS11月12日,陀螺仪接入开启,只需要监听devicemotion事件即可。
- 从 iOS 12.2 开始,Apple 已阻止陀螺仪访问,您需要在 Safari 设置中激活一个选项
- 自 iOS13 起,Apple 实施了 "DeviceOrientationEvent.requestPermission" 请求陀螺仪访问,当用户同意时,devicemotion 事件具有带有 alpha / beta / gamma 值的键 "rotationRate"(之前同意,值为空)。
问题:
在 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,然后 rotationRate
和 accelerationIncludingGravity
均为 null。
所以我认为从现在开始的解决方法是监听 deviceorientation 事件而不是 devicemotion,即使提前请求了权限,无论如何这是强制性的。
对,同上,旋转数据为空。
但是 acceleration 和 accelerationIncludingGravity 不为空,你可以用它们代替。
我从 iOS 11 开始就使用 devicemotion 事件访问 Safari 上的陀螺仪。
历史:
- iOS11月12日,陀螺仪接入开启,只需要监听devicemotion事件即可。
- 从 iOS 12.2 开始,Apple 已阻止陀螺仪访问,您需要在 Safari 设置中激活一个选项
- 自 iOS13 起,Apple 实施了 "DeviceOrientationEvent.requestPermission" 请求陀螺仪访问,当用户同意时,devicemotion 事件具有带有 alpha / beta / gamma 值的键 "rotationRate"(之前同意,值为空)。
问题:
在 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,然后 rotationRate
和 accelerationIncludingGravity
均为 null。
所以我认为从现在开始的解决方法是监听 deviceorientation 事件而不是 devicemotion,即使提前请求了权限,无论如何这是强制性的。
对,同上,旋转数据为空。 但是 acceleration 和 accelerationIncludingGravity 不为空,你可以用它们代替。