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

时间:2015-06-17 14:33:19

标签: android accelerometer samsung-mobile galaxy

我正在开发一款应用程序,需要能够识别手机是否在某处(不移动)。 为此,我使用了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),我只能假设,三星在手机上出现了一些计算错误或者某些传感器反转....

有人有同样的问题吗?

其他(三星)手机会发生这种情况吗?

有没有解决这个问题?

1 个答案:

答案 0 :(得分:0)

===新答案===

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

===老答案===

鉴于我对你的问题有2条评论,并且由于在其他2个Galaxy 5S上存在同样的问题,目前,并且关于检测到电话静止的目标,我只能建议2个解决方法:a 峰峰值考虑高通滤波器

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