Android中重力传感器和加速度传感器有什么区别?在我看来,两种情况下物理值是相同的。哪一个测量设备内单位质量所受的力?补充:问题是:这些传感器测量的是什么物理量?根据等效原理,加速度和重力是无法区分的,唯一的测量方法是使用通常的(但是三维的)弹簧秤。
加速度传感器可以提供设备受到的所有力的总和,而重力传感器仅返回重力的影响。如果想要从加速度中排除重力影响,您可以使用高通滤波器或者从加速度值中减去重力传感器的值--不确定哪种方法可以获得更好的精确度。
另一种方法是使用Sensor.TYPE_LINEAR_ACCELERATION,该方法正好给出了(加速度-重力)的值,但您需要检查设备是否支持此方法。我发现一些设备只有ACCELERATION传感器工作正常,而GRAVITY或LINEAR_ACCELERATION传感器没有响应。
这个链接可能会有帮助:http://www.sensorplatforms.com/which-sensors-in-android-gets-direct-input-what-are-virtual-sensors
以下摘录总结了您的问题的答案:
“列表包括物理传感器和从物理传感器派生的传感器类型,有时称为虚拟传感器...虚拟传感器类型(重力、线性加速度和旋转向量)提供通过智能地组合物理传感器结果导出的数值...旋转向量是由加速度计、磁力计和有时的陀螺仪组合而成,以确定 Android 设备相对于地球坐标系沿着哪个三维角度摆放。通过了解设备的旋转向量,可以将加速度计数据分离为重力和线性加速度。”
这个链接https://dev59.com/Hl3Ua4cB1Zd3GeqP8gfw#8238389 还说,重力值是使用 Butterworth 滤波器计算出来的。
getDefaultSensor
返回了一个非空的传感器用于TYPE_GRAVITY
,并且registerListener
返回了true
,但是onSensorChanged
从未被调用? - Sam