Android - Как записать время, в течение которого акселерометр находится выше + ниже порогового значения в течение длительного периода

В моем приложении я хочу подсчитать, как долго акселерометр превышает определенный порог, но я не знаю, как это сделать.
Чувствительность моего акселерометра установлена ​​на 'SensorManager.SENSOR_DELAY_GAME', поэтому метод onSensorChanged() вызывается примерно 20 раз. Второй.

У меня есть флаг movementFlag, который я устанавливаю в значение true всякий раз, когда скорость акселерометра превышает пороговое значение, и возвращаю значение false, когда оно становится ниже порогового значения.

Итак, скажем, в течение часа я хочу подсчитать общее количество времени, в течение которого movementFlag установлено значение true, увеличивая это значение времени каждый раз, когда оно установлено, и то же самое, когда оно установлено на false.
I подумал, может быть, у меня может быть 2 значения - moveStart и moveFinish - которые я мог бы установить в System.currentTimeMillis() при переходе MovementFlag от true к false и наоборот. Вычитание этих значений друг из друга даст мне количество времени, в течение которого флаг устанавливается каждый раз.
Но я не знаю, как это сделать только при переходе флага, а не все время, пока флаг установлен. .
Может ли кто-нибудь сказать мне, как сделать то, что я хочу сделать здесь, или другой способ? Спасибо


person bobby123    schedule 01.03.2011    source источник
comment
В зависимости от того, что вы хотите с этим сделать: имейте в виду, что некоторые телефоны будут выключать акселерометр, когда экран выключен (например, Motorola Milestone), поэтому измерение перемещений может не работать в течение длительного периода времени. времени (только если экран включен).   -  person Select0r    schedule 01.03.2011
comment
@Select0r. Да, я знаю, частичная блокировка пробуждения должна работать, чтобы обойти эту проблему, но я не пробовал, и на этой странице ошибки Google отображается [ссылка] ( code.google.com/p/android/issues/detail?id=3708), так что на данный момент я настраивается с затемненной блокировкой экрана, жрет батарею, но больше ничего не может сделать.   -  person bobby123    schedule 01.03.2011


Ответы (1)


Вам нужно сохранить два значения, чтобы знать, когда происходит переход, одно из которых хранит последнее значение вашего MovementFlag (давайте назовем его lastV), а другое хранит значение перед этим (prevV). Затем:

  1. При каждом событии смены датчика выполните: prevV = lastV; lastV = флаг движения
  2. Если prevV!=lastV, то у нас есть изменение!!
  3. Если LastV==true, то это означает начало движения - запомнить время начала (moveStart)
  4. Если ложно, то это конец движения - запомните время окончания (moveFinish) и вычтите

Таким образом, вы можете накопить время только на изменения.

person dstefanox    schedule 01.03.2011
comment
Я думаю, что понимаю, к чему вы клоните, используя дополнительные флаги, но описанный выше метод, похоже, не сработает, поскольку я бы установил prevV = lastV, а затем на шаге 2 проверил бы, prevV != lastV. Вы имеете в виду проверить, если prevV != MovementFlag? - person bobby123; 01.03.2011
comment
Вы пропустили часть lastV = motionFlag после prevV = lastV. Таким образом мне удается сохранить предыдущее значение, прежде чем сравнивать его с текущим. Это должно сработать наверняка. - person dstefanox; 01.03.2011
comment
Ой, я чуть не забыл об этом, ваш метод сработал. Здоровья за это!! - person bobby123; 09.03.2011