我正在尝试使用Cordova 2.2.0为Android设备检测震动事件。 我发现了一些与此主题相关的问题,但是在本机代码中,例如此question和此question。
有谁知道如何使用phonegap Cordova检测此事件?或者我应该写一个插件?
答案 0 :(得分:6)
您可以尝试shake.js。我一直在研究它,但没有实现它。看起来很有希望。
答案 1 :(得分:2)
使用加速度计存储先前的值(x,y和z)。定义阈值(x,y,z),如果previosValues和实际一次(event.value [i],其中i = x,y ans z)之间的差异高于阈值,则可以检测到抖动。
您还可以使用加速度值的大小(Acc = sqrt(x * x + y * y + z * z))或时间戳来获得更好的结果。
答案 2 :(得分:0)
Cordova提供了设备动作插件,该插件(令人惊讶地)公开了一个navigator.accelerometer
对象instead of aligning,其中包含自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。