使用位置服务检测设备是否已转弯 android
Detect if device has taken a turn using location service android
我想使用 android phone 上的传感器检测用户在开车时是否在路上转弯。我该如何编码?我正在从所有传感器(加速度计、位置、旋转、地磁)实时收集数据并将它们存储在 SD 卡上。所以我现在只想知道用户有没有转过弯,转过哪个方向。
我假设传感器的注册已经正确完成。您可以使用方向传感器(已弃用)检测方向,如下所示:
@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"的变量声明为全局变量。您可以将 "precision" 值更改为您想要的任何值。我们需要这个值,因为我们不想在方位角的每个微小变化后看到输出。但是,过大的精度会产生不精确的结果。对我来说,“2”是最佳选择。
如果您正在跟踪位置坐标,您还可以跟踪与之前位置的角度之间的变化。
angle = arctan((Y2 - Y1) / (X2 - X1)) * 180 / PI
有关计算 x 和 y 的信息,请参阅 this answer。
使用传感器值的决定基于不切实际的假设,即设备永远不会相对于车辆旋转。
我想使用 android phone 上的传感器检测用户在开车时是否在路上转弯。我该如何编码?我正在从所有传感器(加速度计、位置、旋转、地磁)实时收集数据并将它们存储在 SD 卡上。所以我现在只想知道用户有没有转过弯,转过哪个方向。
我假设传感器的注册已经正确完成。您可以使用方向传感器(已弃用)检测方向,如下所示:
@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"的变量声明为全局变量。您可以将 "precision" 值更改为您想要的任何值。我们需要这个值,因为我们不想在方位角的每个微小变化后看到输出。但是,过大的精度会产生不精确的结果。对我来说,“2”是最佳选择。
如果您正在跟踪位置坐标,您还可以跟踪与之前位置的角度之间的变化。
angle = arctan((Y2 - Y1) / (X2 - X1)) * 180 / PI
有关计算 x 和 y 的信息,请参阅 this answer。
使用传感器值的决定基于不切实际的假设,即设备永远不会相对于车辆旋转。