我正在尝试使用适用于 Android 设备的 Cordova 2.2.0 检测抖动事件。我发现了一些与此主题相关的问题,但在本机代码中,例如 this question和 this question。
有谁知道如何使用 phonegap Cordova 检测此事件?或者我应该写一个插件?
你可以试试shake.js。我一直在研究它,但没有实现它。看起来很有希望。
使用加速度计存储以前的值(x、y 和 z)。定义阈值 (x,y,z) 如果 previosValues 和实际一次 (event.value[i] where i=x,y ans z) 之间的差异高于阈值,您可以检测到抖动。
您还可以使用加速度值的大小 (Acc=sqrt(x*x+y*y+z*z)) 或时间戳来获得更好的结果。
Cordova 提供了 device-motion 插件,它(令人惊讶地)暴露了一个navigator.accelerometer
对象,而不是与自 2011 年以来发布的 W3C deviceorientation/devicemotion标准保持一致。
当设备平放在表面上时,(x, y, z) 加速度将为 (0, 0, 9.81)。检测抖动的基本思想是观察给定频率的加速度,计算前一个样本的增量,并确定它是否大于阈值。
navigator.accelerometer.watchAcceleration(onSuccess, onError, { frequency: 300 });
// Assess the current acceleration parameters to determine a shake
function onSuccess(acceleration) {
var accelerationChange = {};
if (previousAcceleration.x !== null) {
accelerationChange.x = Math.abs(previousAcceleration.x - acceleration.x);
accelerationChange.y = Math.abs(previousAcceleration.y - acceleration.y);
accelerationChange.z = Math.abs(previousAcceleration.z - acceleration.z);
}
previousAcceleration = {
x: acceleration.x,
y: acceleration.y,
z: acceleration.z
};
if (accelerationChange.x + accelerationChange.y + accelerationChange.z > sensitivity) {
// Shake detected, invoke callback
}
}
这样做的插件是 Lee Crossley 的cordova-plugin-shake-detection。