首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓Sensor.TYPE_LINEAR_ACCELERATION在GalaxyS5上报告错误值

安卓Sensor.TYPE_LINEAR_ACCELERATION在GalaxyS5上报告错误值
EN

Stack Overflow用户
提问于 2015-06-17 14:33:19
回答 1查看 859关注 0票数 0

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

代码语言:javascript
复制
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的传感器值计算如下:

代码语言:javascript
复制
Sensor.TYPE_LINEAR_ACCELERATION = Sensor.TYPE_ACCELEROMETER - Sensor.TYPE_GRAVITY   

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

有谁有同样的问题吗?

这种情况是否发生在其他(三星)手机上?

有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-11 11:53:10

===新答案===

我已经看到改变了传感器的采样率,成功地避免了这个错误。从可能的SensorManager.SENSOR_DELAY_FASTESTSensorManager.SENSOR_DELAY_UI

===旧答案===

鉴于我对你的两个问题的评论,并且由于目前在另外两个Galaxy5S‘上有同样的问题,关于检测电话的静止状态的目标,我只能提出两个解决方案:峰值到峰值的考虑,以及高通滤波器。

  1. 峰值到峰值考虑:只需测量最后2个读数之间的差异;如果这个值大于一个阈值,那么就可以触发一个运动事件。
  2. 高通过滤器:在您的代码中实现这样一个过滤器,它只会带来加速的快速变化,同时抑制恒定值19,这稍微复杂一些,但更专业。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30894672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档