Android デバイス用の Cordova 2.2.0 を使用して揺れイベントを検出しようとしています。このトピックに関連するいくつかの質問を見つけましたが、これはネイティブ コードにあり、たとえば this questionと this questionです。
phonegap Cordova を使用してこのイベントを検出する方法を知っている人はいますか? または私はプラグインを書くべきですか?
Shake.jsを試すことができます。私はそれを調べてきましたが、実装していません。それは有望に見えます。
加速度計を使用して、以前の値 (x、y、z) を保存します。しきい値 (x、y、z) を定義すると、previosValues と実際の 1 回 (event.value[i] i=x,y ans z) の差がしきい値よりも高い場合に揺れを検出できます。
また、加速度値 (Acc=sqrt(x*x+y*y+z*z)) の大きさまたはタイムスタンプを使用して、より良い結果を得ることができます。
Cordova は、 2011 年以降に公開された W3C deviceorientation/devicemotion標準に準拠する代わりにnavigator.accelerometer
、(驚くべきことに)オブジェクトを公開する device-motion プラグインを提供しています。
デバイスが表面に平らに置かれている場合、(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です。