来源: [转载]Android传感器—Motion Sensor(一) – FireOfStar的专栏 – 博客频道 – CSDN.NET
本文译自:http://developer.android.com/guide/topics/sensors/sensors_motion.html
Android平台提供 了几个能够监视设备移动的传感器。其中的两个是基于硬件的(加速度传感器和陀螺仪),有三个传感器既可以是基于硬件的,也可以是基于软件的(重力传感器、 线性加速度传感器和旋转矢量传感器)。例如,在某些基于软件传感器的设备上会从加速度传感器和磁力仪中提取它们的数据,但是在其他的设备上,它们也可以使 用陀螺仪来提取数据。大多数Android设备都有加速度传感器和陀螺仪。基于软件的传感器的有效性是可变的,因为它们要依赖一个或多个硬件传感器来提取 对应的数据。
运动传感器用于监视设备 的移动,如:倾斜、振动、旋转或摆动。移动通常是直接的用户输入的反映(如,用户在游戏中操作汽车或控制一个球),但也能够是设备所处的物理环境的反映 (如,驾驶汽车时的位置移动)。在第一种场景中,你要相对于设备的参照系或应用程序的参照系来监视设备的移动,在第二种场景中,你要相对于全球参照系来监 视设备的移动。
通常,移动传感器本身并不用于监视设备的位置,但它们能够跟其他传感器一起来使用,例如跟地磁传感器一起来判断设备相对于全球参照系统的的位置(更多信息,请看位置传感器)。
所有的移动传感器的每个 SensorEvent都会返回传感器值的多维数组。例如,一个加速度传感器的传感器事件会返回三个坐标轴方向的加速度力,陀螺仪会返回三个坐标轴方向旋 转速率。这些数据是以float数组的形式跟SensorEvent参数一起被返回的。表1概要介绍了Android平台上可用的移动传感器。
表1.Android平台所支持的移动传感器
传感器 |
传感器数据 |
描述 |
测量单位 |
TYPE_ACCELEROMETER |
SensorEvent.values[0] | X轴方向的加速力(包括重力) | m/s2 |
SensorEvent.values[1] | Y轴方向的加速力(包括重力) | ||
SensorEvent.values[2] | Z轴方向的加速力(包括重力) | ||
TYPE_GRAVITY |
SensorEvent.values[0] | X轴方向的重力 | m/s2 |
SensorEvent.values[1] | Y轴方向的重力 | ||
SensorEvent.values[2] | Z轴方向的重力 | ||
TYPE_GYROSCOPE |
SensorEvent.values[0] | 绕着X轴的旋转率 | rad/s |
SensorEvent.values[1] |
绕着Y轴的旋转率 |
||
SensorEvent.values[2] | 绕着Z轴的旋转率 | ||
TYPE_LINEAR_ACCELERATION |
SensorEvent.values[0] | X轴方向的加速力(不含重力 | m/s2 |
SensorEvent.values[1] | Y轴方向的加速力(不含重力 | ||
SensorEvent.values[2] | Z轴方向的加速力(不含重力 | ||
TYPE_ROTATION_VECTOR |
SensorEvent.values[0] | 沿着X轴的旋转矢量(x* sin(θ/2)). | 无单位 |
SensorEvent.values[1] | 沿着Y轴的旋转矢量(y* sin(θ/2)). | ||
SensorEvent.values[2] | 沿着Z轴的旋转矢量(z* sin(θ/2)). | ||
SensorEvent.values[3] | 旋转矢量的标量部分((cos(θ/2)).1 |
1标量部分是一个可选值。
对于移动检测和监视,旋 转矢量传感器和重力传感器是使用频率最高的传感器。旋转矢量传感器尤其灵活,可广泛的应用于移动相关的任务,如,检测手势、监视角度变化、监视相对的方向 变化等。例如:如果你正在开发一款使用2维或3维罗盘来增强现实感游戏,或增强相机的稳定性的应用程序,那么旋转矢量传感器是非常理想的选择。在大多场景 中,使用这些传感器比使用加速度传感器和地磁传感器或方向传感器要好。