Как записывать данные с Android Motion Sensors с фиксированной скоростью

Изучаю основы программирования под Android.

У меня есть простое приложение для тестирования Android, в котором я записываю акселерометр, магнитометр и данные об ориентации во внешний файл, а также отображаю его. Я запускаю процесс регистрации по щелчкуНачните кнопка (registerListener для соответствующих датчиков) путем вызова методаinitLogger.

Что выглядит примерно так ...

public void initLogger(View view)
{
    boolean bFlag = false;

    Button btnStart = (Button)findViewById(R.id.btnStartLog);
    Button btnStop = (Button)findViewById(R.id.btnStopLog);

    btnStart.setEnabled(bFlag);
    btnStop.setEnabled(!bFlag);

    bEnableLogging = true;
    //Start reading the sensor values
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_UI);
    sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);

   //so on.... 

Также есть кнопка Стоп, которая должна остановить процесс регистрации (и, наконец, отменить регистрацию, вызвав unregisterListener для каждого датчика)

Процесс поиска данных происходит внутриonSensorChanged обработчик, который должен извлечь данные из соответствующих датчиков, установить значение для соответствующих элементов пользовательского интерфейса и, наконец, записать данные во внешний файл .csv.

onSensorChanged EventHandler выглядит примерно так ...

public void onSensorChanged(SensorEvent event) {


    // TODO Auto-generated method stub
    // accelerometer
    TextView tAX = (TextView) findViewById(R.id.txtViewAxValue);
    TextView tAY = (TextView) findViewById(R.id.txtViewAyValue);
    TextView tAZ = (TextView) findViewById(R.id.txtViewAzValue);

    // magnetic field
    TextView tMX = (TextView) findViewById(R.id.txtViewMx);
    TextView tMY = (TextView) findViewById(R.id.txtViewMy);
    TextView tMZ = (TextView) findViewById(R.id.txtViewMz);

    if (bEnableLogging) {
        if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {

            accelerometerdata = event.values.clone();

            tAX.setText(Double.toString(accelerometerdata[0]));
            tAY.setText(Double.toString(accelerometerdata[1]));
            tAZ.setText(Double.toString(accelerometerdata[2]));


        }

        if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {

            magneticmatrixdata = event.values.clone();

            tMX.setText(Double.toString(magneticmatrixdata[0]));
            tMY.setText(Double.toString(magneticmatrixdata[1]));
            tMZ.setText(Double.toString(magneticmatrixdata[2]));

        }

               // so on ....

Хотя я получаю данные от всех настроенных датчиков, у меня нет контроля над скоростью, с которой данные принимаются. т.е.

Я знаю, что событие SensorChanged происходит, как и при изменении данных датчика. Однако я хочу, чтобы это событие было проведено с фиксированной скоростью.Например: каждые 40 мс

Вопрос:

Как убедиться, что событие SensorChanged происходит с постоянной скоростью?Помогает ли в этом случае класс TimerTask на Java?

Эксперты здесь, в SO.Пожалуйста, помогите мне :)

Ответы на вопрос(5)

Ваш ответ на вопрос