Как задержать прослушиватель событий датчика [выборка значений датчика акселерометра]?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как задержать прослушиватель событий датчика [выборка значений датчика акселерометра]?

Сообщение Anonymous »

Прошу прощения, если заголовок недостаточно ясен, но по сути я хочу иметь возможность собирать данные с датчиков только каждые несколько секунд. Я использую акселерометр и датчики GPS.
Все мои попытки добавить задержки к выводу не работают. Несколько моих попыток приведены ниже. Я понятия не имею, почему они не работают.
  • Использование таймера обратного отсчета внутри цикла while(true). Цикл while никогда не вводится. Я тестировал с использованием операторов отладки/печати и других простых методов.

Код: Выделить всё

        while(true)
{
new CountDownTimer(2000, 500)
{
@Override
public void onTick(long l)
{
}

public void onFinish()
{
sensorWork();  // -> Only printing the sensor values. Slightly different from the one included below.
}
}.start();
}
  • Поиграемся с событиями прослушивателя. Я пробовал экспериментировать с регистрацией слушателей, отменой их регистрации и так далее. Но таймер обратного отсчета, похоже, работает только при первом входе.

Код: Выделить всё

    public void sensorWork()
{
new CountDownTimer(2000, 500)
{
@Override
public void onTick(long l)
{
}

@Override
public void onFinish() {
sensorEventListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent sensorEvent) {

if (sensorEvent.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
workLinearAcceleration(sensorEvent);
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_GRAVITY) {
workGravity(sensorEvent);
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
workGyroscope(sensorEvent);
}
if (sensorEvent.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {
workRotationVector(sensorEvent);
}
}

@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
};

sensorManager.registerListener(sensorEventListener, sensorGravity, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener, sensorLinearAcc, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener, sensorGyro, SensorManager.SENSOR_DELAY_NORMAL);
sensorManager.registerListener(sensorEventListener, sensorRotationVector, SensorManager.SENSOR_DELAY_NORMAL);

sensorWork();
}
}.start();
}
Моя потребность — считывать значения акселерометра и GPS каждые X секунд и распечатывать их (печать включает в себя печать в пользовательском интерфейсе и сохранение в файл).Что я могу сделать на данный момент — получать сотни значений акселерометра каждую секунду (слишком много, чтобы блокировать действие прокрутки TextView) без моего вмешательства; Получайте значения GPS в любое время (как и предполагалось).
В чем мне нужна помощь – Как получать значения акселерометра только тогда, когда они мне нужны? В идеале я хочу иметь возможность настроить таймер обратного отсчета внутри бесконечного цикла, который включает операторы для печати/сохранения значений акселерометра и GPS.

Подробнее здесь: https://stackoverflow.com/questions/791 ... e-sampling
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»