位置传感器Position Sensors
Android平台提供了两种决定设备位置的传感器:
地磁场传感器和方向传感器(the geomagnetic field sensor and the orientation sensor)。
还有一种传感器用于检测设备正面和其他物体的距离,叫做接近传感器(proximity sensor)。
地磁场传感器和接近传感器是基于硬件的。
方向传感器是基于软件的,它的数据是根据加速度计和地磁场传感器导出的。
但是方向传感器自从Android 2.2 (API Level 8)开始就被废弃了。
位置传感器也是返回一个多维向量,放在 SensorEvent
中的values数组中。
返回值见表:
方向传感器Orientation Sensor
方向传感器是根据地磁场传感器和加速度计推导出输出数据的。
使用这两个硬件传感器,方向传感器为下面三个方向提供了数据:
1. Azimuth:绕Z轴旋转的度数。这是设备的y轴和地磁场北极的夹角。比如,设备的y轴指向东,这个度数就为90。
2. Pitch:绕X轴旋转的度数。当设备的z轴朝着y轴正向旋转时,这个值是正值,反之,当设备的z轴朝着y轴的负向旋转时,这个值为负值。它的取值范围是-180到180。
3. Roll:绕Y轴旋转的度数。当设备的z轴朝着x轴正向旋转时,这个值是正值,反之,当设备的z轴朝着x轴的负向旋转时,这个值为负值。它的取值范围是-90到90。
注意这个定义是非常特殊的,因为它在顺时针旋转的时候是正值,而数学上总是逆时针为正值。
因为方向传感器需要大量的处理运算,所以它的准确度和精度都有所下降。后来,自Android 2.2 (API level 8),方向传感器被废弃。
官方建议使用下面的方法:
利用getRotationMatrix()结合getOrientation()方法可以计算方向值。
还可以利用remapCoordinateSystem()把方向值转换到你的应用的参考坐标系。
地磁场传感器Geomagnetic Field Sensor
地磁场传感器监测地球地磁场变化。
传感器提供三个坐标上的原始的磁场强度值(in μT)。
一般情况下,你不需要直接使用这个传感器,你可以使用旋转向量传感器来决定原始的旋转运动;你也可以使用加速度计和地磁场传感器并结合getRotationMatrix()方法来获得旋转矩阵和倾斜矩阵。
你可以结合 getOrientation()
和 getInclination()
方法来使用这些矩阵,从而得到方位和地磁场偏移数据。
接近传感器Proximity Sensor
接近传感器可以让你得到设备离另一个物体的距离。
接近传感器通常用于检测设备正面和用户头部的距离,比如用户正在打电话。
大多数Proximity Sensor返回绝对的距离数值,以cm为单位。但是也有一些只返回近或者远。
参考资料
API Guides: Position Sensors
http://developer.android.com/guide/topics/sensors/sensors_position.html