【发布时间】:2013-07-16 13:15:30
【问题描述】:
我在我的简单演示 PhoneGap Buld 应用程序中使用了来自 this answer(将代码重写为 Javascript)的信息和代码,以 1 秒的频率将重力 (G) 重新计算为实际加速度 (m/s2)。
这是实际代码(重要部分):
function onAccelerationSuccess(acceleration)
{
var g = 9.80665;
acceleration.x = (acceleration.x * g).toFixed(2) + ' m/s\u00b2';
acceleration.y = (acceleration.y * g).toFixed(2) + ' m/s\u00b2';
acceleration.z = ((acceleration.z + 1) * g).toFixed(2) + ' m/s\u00b2';
...
}
watchID = navigator.accelerometer.watchAcceleration(onAccelerationSuccess, onAccelerationError, {frequency: 1000});
提到的答案和许多很多消息来源声称,当我的手机正面朝上放在桌子上时,我应该分别得到 x、y 和 z 轴的 (0, 0, -1) G 值。假设地球的自然加速度(g = 9.80665),我应该看到(0, 0, 9.81) m/s2 的实际加速度值,这些值不应该改变(因为手机静止不动)。我说的对吗?
但是,实际上我看到,我的真正价值观是:
- X轴:
-1.87,-1.50,-2.25, - Y轴:
2.26,1.88,1.51,0.76, - Z轴:
101.87,101.49,102.25,102.62,103.37。
这些值是不断变化的,但仅限于提到的这些值之间,并不是每个轴每秒都会改变值。有时,某个轴的值会保持 2-3 秒。
发生了什么?如果手机静止在我的桌子上,它如何改变它的加速度?没有向任何方向移动的任何设备怎么会有像 100 m/s2 这样巨大的加速度?
我听说移动设备上的加速器更像是玩具,而不是真正的测量设备,而且它们会对返回值产生大量噪音或抖动。但是,看在上帝的份上,这完全是垃圾,完全没有使用这个功能。
我在装有 Android 4.2.2 的 Google Nexus(第一版)手机上测试了这段代码。带有 Phonegap 2.9.0 的应用程序。
编辑:我已经使用 Ripple Emulator 测试了我的移动应用程序,并且得到了完全有效的值:
Acceleration in the X axis is 0.00 m/s².
Acceleration in the Y axis is 0.00 m/s².
Acceleration in the Z axis is 9.81 m/s².
我的 Nexus 上的加速度计/指南针/陀螺仪有问题吗?
【问题讨论】:
标签: android cordova accelerometer phonegap-build