Android Sensor.TYPE_LINEAR_ACCELERATION 在 Galaxy S5 上报告错误值

Android Sensor.TYPE_LINEAR_ACCELERATION reporting wrong values on Galaxy S5

我正在开发一个应用程序,它需要能够识别 phone 是否躺在某处(没有移动)。 为此,我使用了 Sensor.TYPE_LINEAR_ACCELERATION 来报告没有重力分量的加速度。在我的测试设备 (Nexus 5) 上,它报告如下:x=0,002, y=-0,02, z=-0,005 为了检测设备是否静止不动,我计算平均值:

avg =sqrt(sqr(x)+sqr(y)+sqr(z))

如果该值低于阈值,我会向用户报告设备处于静止状态。在我的 Nexus 5 上运行良好。

但是,Galaxy S5 在静止不动时会报告类似的内容: x=-0,761, y=0,167, z=19,923

所以 z 值显然是错误的...当我用谷歌搜索这个问题的答案时,我发现 TYPE_LINEAR_ACCELERATION 的传感器值计算如下:

Sensor.TYPE_LINEAR_ACCELERATION = Sensor.TYPE_ACCELEROMETER - Sensor.TYPE_GRAVITY   

由于加速度计和重力传感器应包含地球重力 (~9,81m/s2),我只能假设三星在 phone 上出现了一些计算错误或安装了一些传感器....

有人遇到同样的问题吗?

这是否发生在其他(三星)phones 上?

有什么解决办法吗?

=== 新答案===

我看到 更改传感器的采样率 可以避免此错误。从可能的SensorManager.SENSOR_DELAY_FASTESTSensorManager.SENSOR_DELAY_UI

=== 旧答案===

鉴于我对你的问题的 2 条评论,并且由于目前在其他 2 部 Galaxy 5S 上也有同样的问题,并且关于检测手机静止的目标,我只能建议 2 种解决方法: 峰峰值考虑,以及高通滤波器.

  1. 峰峰值考虑:只测量最后2个读数之间的差异;如果这大于阈值,则可以触发移动事件。
  2. High Pass Filter:稍微复杂一点,但更专业,在你的代码中实现这样一个过滤器,只会带来加速度的快速变化,同时抑制恒定值共 19