Android は多くのセンサーをサポートしており、API は定期的なサンプリングをサポートしています。つまり、指定されたサンプリング時間ごとにセンサー データをサンプリングできます。理想的には、定期的なサンプリングは便利ですが、電話が長時間振動していないとき (充電中など) に、加速度計などのセンサーを継続的に読み取る必要がないことがよくあります。サンプリング周波数が固定されていない、つまり 2 つのサンプル間の期間がランダムな場合に、加速度計のデータをランダムに読み取りたいと考えています。それ、どうやったら出来るの ?
加速度計データを読み取るために、次のコードを試しました。
final public SensorEventListener listener=new SensorEventListener() {
public void onSensorChanged(SensorEvent e) {
Log.d(TAG, "in sensor changed");
if (e.sensor.getType()==Sensor.TYPE_ACCELEROMETER) {
double netForce=e.values[0]*e.values[0];
netForce+=e.values[1]*e.values[1];
netForce+=e.values[2]*e.values[2];
AccelX=e.values[0];
AccelY=e.values[1];
AccelZ=e.values[2];
message_acc= String.valueOf(AccelX)+","+String.valueOf(AccelY)+","+String.valueOf(AccelZ);
Log.d(TAG, message_acc);
//check if the phone is shaking
if (threshold<netForce) {
isShaking();
}
else {
isNotShaking();
}
}
}
このメソッドは、定期的に呼び出されるスレッドで呼び出されます。上記のコードでは、API により、データに変更があるたびにデータを収集できます。私の疑問は、このアプローチは特定のサンプリング期間の定期的なデータ収集ですか? サンプリング期間を確定的に指定するにはどうすればよいですか?
第二に、ランダムなデータ収集を実行したい場合は、スレッド レベルで実行する必要があります。つまり、上記のメソッドをランダムに呼び出し/スケジュールしますか? これを実装するための指針、またはこれを達成するためのより良い方法はありますか?