我正在开发一个应用程序,需要能够识别手机是否在某处(不移动)。为此,我使用了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),我只能假设,三星做了一些计算错误,或安装了一些传感器反向在电话.
有谁有同样的问题吗?
这种情况是否发生在其他(三星)手机上?
有什么解决办法吗?
发布于 2015-08-11 11:53:10
===新答案===
我已经看到改变了传感器的采样率,成功地避免了这个错误。从可能的SensorManager.SENSOR_DELAY_FASTEST到SensorManager.SENSOR_DELAY_UI
===旧答案===
鉴于我对你的两个问题的评论,并且由于目前在另外两个Galaxy5S‘上有同样的问题,关于检测电话的静止状态的目标,我只能提出两个解决方案:峰值到峰值的考虑,以及高通滤波器。
https://stackoverflow.com/questions/30894672
复制相似问题