如何用cordova android检测摇动事件?

时间:2012-12-10 21:58:05

标签: android cordova

我正在尝试使用Cordova 2.2.0为Android设备检测震动事件。 我发现了一些与此主题相关的问题,但是在本机代码中,例如此question和此question

有谁知道如何使用phonegap Cordova检测此事件?或者我应该写一个插件?

3 个答案:

答案 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