所以我在这里找到了重力传感器代码https://cs.android.com/android/platform/superproject/+/master:frameworks/native/services/sensorservice/GravitySensor.cpp
这是由 Android 实现的重力传感器。但这显然不是我得到的传感器。使用 Sensor Kinetics 应用程序时,我可以看到手机上的重力传感器来自三星电子。所以看起来制造商还捆绑了重力传感器的实现。
这解释了为什么我在不同设备上看到不同的重力传感器值结果,而陀螺仪 + 加速度计值非常相似(因为陀螺仪加速度相似,我希望重力值也有很大相似性,因为重力来自加速度 + 陀螺仪)。
那么有没有办法注册一个特定于Android实现的事件监听器?或者更好的是有一个能够过滤掉重力的 Java 传感器(陀螺仪和加速度)融合库。这将是最好的,因为我不会依赖于 Android 版本和/或制造商的实现。
我目前注册的方式:
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY), SensorManager.SENSOR_DELAY_FASTEST);
谢谢。
更新:我的假设似乎是正确的。在此页面上,他们正在讨论一种选择辅助重力传感器(如果制造商提供)的方法,但没有描述如何。如果我使用 SensorManager.getSensors() 并列出它们,不幸的是谷歌辅助传感器没有列出。请参阅https://developer.android.com/guide/topics/sensors/sensors_motion#android-open-source-project-sensors
Galaxy A40(版本 1)上的重力传感器。
Galaxy S9 上的重力传感器,来自三星,版本 3 - 不同的算法。