从没有磁力计的设备获得音调

时间:2016-03-16 18:16:40

标签: android orientation android-sensors samsung-mobile

我需要获得设备的方向(音高要具体), 我正在使用一种方法,涉及实现SensorEventListener加速度计和磁力计

问题是有些设备没有磁力计(我偶然发现了三星J7和J5,但假设有更多),我测试的所有其他设备都像魅力一样。现在我知道这些设备没有磁力计,所以我尝试注册已弃用的" TYPE_ORIENTATION"事件和" TYPE_ROTATION_VECTOR"事件但没有工作。

我在这些设备上获得的只是来自加速度计的事件。

我知道这是可能的,因为我已经在这些手机上下载了泡泡级应用程序并且它们可以工作(指南针剂量) 感谢

编辑: 我需要通过倾斜手机滚动视图,所以我需要校准一次,而不是知道音高是大于还是小于初始校准

1 个答案:

答案 0 :(得分:1)

你需要低通滤波器加速度计来获得重力矢量。

float[] gravity = low pass filter accelerometer

计算重力的范数

float gravityNorm = calculate the norm of gravity.

然后音高

(float) Math.asin(-gravity[1] / gravityNorm))

对于上面的公式,请阅读https://github.com/hoananguyen/dsensor

项目DSensor中DSensor类中的TYPE_PITCH文档