Определить, если устройство по очереди, используя службу определения местоположения Android
Я хочу определить, сделал ли пользователь поворот на дороге во время вождения, используя датчики на телефоне Android. Как мне это написать? Я собираю данные в реальном времени со всех датчиков (акселерометр, местоположение, вращение, геомагнитные) и храню их на SD-карте. Так что теперь я просто хочу знать, сделал ли пользователь поворот и в каком направлении он повернулся.
2 ответа
Я предполагаю, что регистрация датчика выполнена правильно. Вы можете определить направление с помощью датчика ориентации (не рекомендуется) следующим образом:
@Override
public void onSensorChanged(SensorEvent event) {
float azimuth_angle = event.values[0];
int precision = 2;
if (prevAzimuth - azimuth_angle < precision * -1)
Log.v("->", "RIGHT");
else if (prevAzimuth - azimuth_angle > precision)
Log.v("<-", "LEFT");
prevAzimuth = azimuth_angle;
}
Примечание. Переменная "prevAzimuth" объявлена как глобальная. Вы можете изменить значение "точность" на все, что вы хотите. Нам нужно это значение, потому что мы не хотим видеть выходные данные после каждого тривиального изменения угла азимута. Однако слишком большая точность дает неточные результаты. Для меня "2" является оптимальным.
Если вы отслеживаете координаты местоположения, вы также можете отслеживать сдвиги между углами от предыдущих местоположений.
angle = arctan((Y2 - Y1) / (X2 - X1)) * 180 / PI
Смотрите этот ответ для расчета х и у.
Решение использовать значения датчика основано на нереалистичном предположении, что устройство никогда не поворачивается относительно транспортного средства.