私は歩数計を開発していますAndroid歩数をカウントし、歩数を使用して走行距離と消費カロリーを計算します。チュートリアルに従っています Androidのシンプルな歩数計とステップカウンター で、まったく同じように行われ、センサーが動きを検出するとステップ数を検出します。
しかし、それにはいくつかの問題があります。
私は、この種のことをしないPlayストアの他のアプリケーションをいくつかチェックしました。
検索しましたが、適切なソリューションまたはチュートリアルが見つかりません。ヘルプや提案。ありがとう
クラス内にSensorEventListenerリスナーを実装し、2つのメソッドonSensorChangedおよびonAccuracyChangedをオーバーライドすることで開始できます追跡手順。
public class StepActivity extends Activity implements SensorEventListener{
SensorManager sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
Sensor sSensor= sensorManager .getDefaultSensor(Sensor.TYPE_STEP_DETECTOR);
...
}
SensorManagerとSensorを初期化し、Sensorをアクティビティ内のリスナーとして登録しました。次に、によってトリガーされるonSensorChanged関数を実装する必要がありますSensorEventは、登録したSensorに変更があるたびに、この場合はTYPE_STEP_DETECTORになります。
private long steps = 0;
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
float[] values = event.values;
int value = -1;
if (values.length > 0) {
value = (int) values[0];
}
if (sensor.getType() == Sensor.TYPE_STEP_DETECTOR) {
steps++;
}
}
ここでの問題は、実装が十分に洗練されていないことです。加速度計データにスパイクがあるかどうかをチェックし、スパイクがステップから来ていると仮定するだけです。加速度の急上昇が実際にどこから来ているのかはわかりません。それは、手でデバイスをジャンプしたり振ったりすることからも発生する可能性があります。
それをより正確にする方法は?さて、それは非常に難しい質問であり、科学論文で長い間話題になっています。最も高度なフィットネストラッカー(機械学習、信号処理、およびその他の統計的手法を使用)でさえ、ステップが実際であるか、デバイスで遊んでいるだけでいいか、判断するのが困難です。
幸いなことにAndroidには独自の組み込み ステップカウンター および ステップディテクター があり、これらは例のクラスよりも洗練されています。
したがって、信号処理とAI(ステップ検出のデータサイエンスについてはあまり知りませんが、強くお勧めします)を本当に学びたいのでなければ、組み込みの検出器とカウンターを使用することをお勧めします。
これは、ステップカウントを達成するための非常に単純な方法です。 Androidに組み込まれているステップカウンターを使用する必要があります。これは、ステップ検出を改善できるジャイロスコープなど、利用可能な場合は他のセンサーも使用するためです。その上にビルドする場合は、このビルトインバージョンを特に使用する必要があります。信頼できる下層が必要です。また、加速度計から重力成分を除去して計算される線形加速度センサーを使用してみることもできます。重力により加速度計は非常に敏感になります。そのため、立っているときにステップカウンターが増加するのがわかります。
詳細はここにあります: https://source.Android.com/devices/sensors/sensor-types#step_detector
それでも最初から開発したい場合は、次のコードを参照してください。 https://github.com/bagilevi/Android-pedometer
また、Google奨学生は、ステップカウントアルゴリズムに関する最新の論文を試すことができます。特に、トピックに関する最新の調査を読んでみてください。