我正在 Android 上测试 TYPE_LINEAR_ACCELERATION 传感器 - 我正在按照我认为的标准方式进行设置:
acceleration = sensorManager.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION);
...
sensorManager.registerListener(this, acceleration, kMotionUpdatePeriod);
...
public void onSensorChanged(SensorEvent event)
{
switch(event.sensor.getType())
{
case Sensor.TYPE_LINEAR_ACCELERATION:
Logger.info(this,"Linear Accel %.2f %.2f %.2f",event.values[0], event.values[1], event.values[2] );
break;
}
}
我的理解是 LINEAR_ACCELERATION 旨在使用传感器融合从加速度计读数中消除重力并产生设备正在经历的净加速度。
我已经在运行 5.1.1 的 Android Wear watch (Sony SWR50) 上对此进行了测试,当设备放在 table 上时,我得到了这些类型的值:
03-04 09:58:58.309 Linear Accel -0.20 0.74 0.14
03-04 09:58:58.328 Linear Accel -0.20 0.70 0.14
03-04 09:58:58.341 Linear Accel -0.23 0.71 0.13
还在运行 4.3 的 Galaxy S3 上进行了测试,我得到:
03-04 09:48:22.307 Linear Accel -0.13 -0.11 -0.39
03-04 09:48:22.412 Linear Accel -0.11 -0.09 -0.34
03-04 09:48:22.507 Linear Accel -0.09 -0.11 -0.42
我预计这些值会有点错误 - 但当设备只是放在 table 上时,这些值似乎太高了。 watch 的总加速度约为 0.7 m/s2,Galaxy 约为 0.4 m/s2。
我也在 iOS 上开发这个,当 iOS 设备静止时,我从 iOS 设备获得的 userAcceleration 数据最多为 0.01 m/s2,这是我认为你所期望的。
我在尝试使用 LINEAR_ACCELERATION 时是否遗漏了什么?
有没有其他人在他们的 Android 设备上获得的数据更像我从 iOS 获得的数据?
最佳答案
好吧,这么愚蠢的错误。
iOS 使用 G 单位作为加速度值,Android 使用 m/s2,因此相差 9.81。
关于android - 为什么 TYPE_LINEAR_ACCELERATION 在设备静止时产生非零值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793247/