6

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

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

4

3 回答 3

6

你可以试试shake.js。我一直在研究它,但没有实现它。看起来很有希望。

于 2012-12-11T20:04:57.763 回答
2

使用加速度计存储以前的值(x、y 和 z)。定义阈值 (x,y,z) 如果 previosValues 和实际一次 (event.value[i] where i=x,y ans z) 之间的差异高于阈值,您可以检测到抖动。

您还可以使用加速度值的大小 (Acc=sqrt(x*x+y*y+z*z)) 或时间戳来获得更好的结果。

于 2012-12-11T20:34:24.073 回答
0

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

于 2015-04-17T12:38:21.797 回答