Android传感器功能特性描述android.hardware.Camera允许应用程序与相机交互的类,可以截取照片、获取预览屏幕的图像,修改用来治理相机操作的参数。android.hardware.SensorManager允许访问Android平台传感器的类。并非所有配备Android的设备都支持SensorManager中的所有传感器,虽然这种可能性让人非常兴奋。android.hardware.SensorListener在传感器值实时更改时,希望接收更新的类要实现的接口。应用程序实现该接口来监视硬件中一个或多个可用传感器。android.FaceDetector允许对人脸(以位图形式包含)进行基本识别的类。不可能有两张完全一样的脸。可以使用该类作为设备锁定方法,无需记密码—这是手机的生物特征识别功能。SensorListener接口是传感器应用程序的中心。它包括两个必需方法:onSensorChanged(intsensor,floatvalues[])方法在传感器值更改时调用。该方法只对受此应用程序监视的传感器调用(更多内容见下文)。该方法的参数包括:一个整数,指示更改的传感器;一个浮点值数组,表示传感器数据本身。有些传感器只提供一个数据值,另一些则提供三个浮点值。方向和加速表传感器都提供三个数据值。当传感器的准确性更改时,将调用onAccuracyChanged(intsensor,intaccuracy)方法。参数包括两个整数:一个表示传感器,另一个表示该传感器新的准确值。要与传感器交互,应用程序必须注册以侦听与一个或多个传感器相关的活动。注册使用SensorManager类的registerListener方法完成。本文中的代码示例演示了如何注册和注销SensorListener。记住,并非所有支持Android的设备都支持SDK中定义的所有传感器。如果某个传感器无法在特定的设备上使用,您的应用程序就会适当地降级。根据工作原理,传感器可分为物理传感器和化学传感器两大类。物理传感器应用的是物理效应,诸如压电效应,磁致伸缩现象,离化、极化、热电、光电、磁电等效应。被测信号量的微小变化都将转换成电信号。化学传感器包括那些以化学吸附、电化学反应等现象为因果关系的传感器,被测信号量的微小变化也将转换成电信号。大多数传感器是以物理原理为基础运作的。化学传感器的技术问题较多,例如可靠性问题、规模生产的可能性、价格问题等,解决了这些问题,化学传感器的应用将会有巨大增长。而有些传感器既不能划分为物理类,也不能划分为化学类。1加速度传感器加速度传感器又叫G-sensor,返回x、y、z三轴的加速度数值。该数值包含地心引力的影响,单位是m/s^2。将手机平放在桌面上,x轴默认为0,y轴默认0,z轴默认9.81。将手机朝下放在桌面上,z轴为-9.81。将手机向左倾斜,x轴为正值。将手机向右倾斜,x轴为负值。将手机向上倾斜,y轴为负值。将手机向下倾斜,y轴为正值。加速度传感器可能是最为成熟的一种mems产品,市场上的加速度传感器种类很多。手机中常用的加速度传感器有BOSCH(博世)的BMA系列,AMK的897X系列,ST的LIS3X系列等。这些传感器一般提供±2G至±16G的加速度测量范围,采用I2C或SPI接口和MCU相连,数据精度小于16bit。2磁力传感器磁力传感器简称为M-sensor,返回x、y、z三轴的环境磁场数据。该数值的单位是微特斯拉(micro-Tesla),用uT表示。单位也可以是高斯(Gauss),1Tesla=10000Gauss。硬件上一般没有独立的磁力传感器,磁力数据由电子罗盘传感器提供(E-compass)。电子罗盘传感器同时提供下文的方向传感器数据。3方向传感器方向传感器简称为O-sensor,返回三轴的角度数据,方向数据的单位是角度。为了得到精确的角度数据,E-compass需要获取G-sensor的数据,经过计算生产O-sensor数据,否则只能获取水平方向的角度。方向传感器提供三个数据,分别为azimuth、pitch和roll。azimuth:方位,返回水平时磁北极和Y轴的夹角,范围为0°至360°。0°=北,90°=东,180°=南,270°=西。pitch:x轴和水平面的夹角,范围为-180°至180°。当z轴向y轴转动时,角度为正值。roll:y轴和水平面的夹角,由于历史原因,范围为-90°至90°。当x轴向z轴移动时,角度为正值。电子罗盘在获取正确的数据前需要进行校准,通常可用8字校准法。8字校准法要求用户使用需要校准的设备在空中做8字晃动,原则上尽量多的让设备法线方向指向空间的所有8个象限。手机中使用的电子罗盘芯片有AKM公司的897X系列,ST公司的LSM系列以及雅马哈公司等等。由于需要读取G-sensor数据并计算出M-sensor和O-sensor数据,因此厂商一般会提供一个后台daemon来完成工作,电子罗盘算法一般是公司私有产权。OrientationSensor三个坐标的含义:values[0]:方位角(水平旋转角),简单的说就是手机的头现在朝向哪个方位,0=北、90=东、180=南、270=西values[1]:纵向旋转角,0=面朝上平置、-90=垂直向上、-180/180=面朝下平置、90=垂直向下values[2]:横向旋转角,0=朝前、90=往右倒、-90=往左倒4陀螺仪传感器陀螺仪传感器叫做Gyro-sensor,返回x、y、z三轴的角加速度数据。角加速度的单位是radians/second。根据NexusS手机实测:水平逆时针旋转,Z轴为正。水平逆时针旋转,z轴为负。向左旋转,y轴为负。向右旋转,y轴为正。向上旋转,x轴为负。向下旋转,x轴为正。ST的L3G系列的陀螺仪传感器比较流行,iphone4和google的nexuss中使用该种传感器。陀螺仪传感器的类型常量是Sensor.TYPE_GYROSCOPE。values数组的三个元素表示的含义如下:values[0]:延X轴旋转的角速度。values[1]:延Y轴旋转的角速度。values[2]:延Z轴旋转的角速度。当手机逆时针旋转时,角速度为正值,顺时针旋转时,角速度为负值。陀螺仪传感器经常被用来计算手机已转动的角度,代码如下:privatestaticfinalfloatNS2S=1.0f/1000000000.0f;privatefloattimestamp;publicvoidonSensorChanged(SensorEventevent){if(timestamp!=0){//event.timesamp表示当前的时间,单位是纳秒(1百万分之一毫秒)finalfloatdT=(event.timestamp-timestamp)*NS2S;angle[0]+=event.values[0]*dT;angle[1]+=event.values[1]*dT;angle[2]+=event.values[2]*dT;}timestamp=event.timestamp;}上面代码中通过陀螺仪传感器相邻两次获得数据的时间差(dT)来分别计算在这段时间内手机延X、Y、Z轴旋转的角度,并将值分别累加到angle数组的不同元素上。5光线感应传感器光线感应传感器检测实时的光线强度,光强单位是lux,其物理意义是照射到单位面积上的光通量。光线感应传感器主要用于Android系统的LCD自动亮度功能。可以根据采样到的光强数值实时调整LCD的亮度。光线传感器的类型常量是Sensor.TYPE_LIGHT。values数组只有第一个元素(values[0])有意义。表示光线的强度。最大的值是120000.0f。AndroidSDK将光线强度分为不同的等级,每一个等级的最大值由一个常量表示,这些常量都定义在SensorManager类中,代码如下:publicstaticfinalfloatLIGHT_SUNLIGHT_MAX=120000.0f;publicstaticfinalfloatLIGHT_SUNLIGHT=110000.0f;publicstaticfinalfloatLIGHT_SHADE=20000.0f;publicstaticfinalfloatLIGHT_OVERCAST=10000.0f;publicstaticfinalfloatLIGHT_SUNRISE=400.0f;publicstaticfinalfloatLIGHT_CLOUDY=100.0f;publicstaticfinalfloatLIGHT_FULLMOON=0.25f;publicstaticfinalfloatLIGHT_NO_MOON=0.001f;6压力传感器压力传感器返回当前的压强,单位是百帕斯卡hectopascal(hPa)。7温度传感器温度传感器返回当前的温度。8接近传感器接近传感器检测物体与手机的距离,单位是厘米。一些接近传感器只能返回远和近两个状态,因此,接近传感器将最大距离返回远状态,小于最大距离返回近状态。接近传感器可用于接听电话时自动关闭LCD屏幕以节省电量。一些芯片集成了接近传感器和光线传感器两者功能。下面三个传感器是Android2新提出的传感器类型,目前还不太清楚有哪些应用程序使用。9重力传感器重力传感器简称GV-sensor,输出重力数据。在地球上,重力数值为9.8,单位是m/s^2。坐标系统与加速度传感器相同。当设备复位时,重力传感器的输出与加速度传感器相同。类型常量是Sensor.TYPE_GRAVITY。重力传感器与加速度传感器使用同一套坐标系。values数组中三个元素分别表示了X、Y、Z轴的重力大小。AndroidSDK定义了一些常量,用于表示星系中行星、卫星和太阳表面的重力。下面就来温习一下天文知识,将来如果在地球以外用Android手机,也许会用得上。publicstaticfinalfloatGRAVITY_SUN=275.0f;publicstaticfinalfloatGRAVITY_MERCURY=3.70f;publicstaticfinalfloatGRAVITY_VENUS=8.87f;publicstaticfinalfloatGRAVITY_EARTH=9.80665f;publicstaticfinalfloatGRAVITY_MOON=1.6f;publicstaticfinalfloatGRAVITY_MARS=3.71f;publicstaticfinalfloatGRAVITY_JUPITER=23.12f;publicstaticfinalfloatGRAVITY_SATURN=8.96f;publicstaticfinalfloatGRAVITY_URANUS=8.69f;publicstaticfinalfloatGRAVITY_NEPTUNE=11.0f;publicstaticfinalfloatGRAVITY_PLUTO=0.6f;publicstaticfinalfloatGRAVITY_DEATH_STAR_I=0.000000353036145f;publicstaticfinalfloatGRAVITY_THE_ISLAND=4.815162342f;10线性加速度传感器线性加速度传感器简称LA-sensor。线性加速度传感器是加速度传感器减去重力影响获取的数据。单位是m/s^2,坐标系统与加速度传感器相同。加速度传感器、重力传感器和线性加速度传感器的计算公式如下:加速度=重力+线性加速度11旋转矢量传感器旋转矢量传感器简称RV-sensor。旋转矢量代表设备的方向,是一个将坐标轴和角度混合计算得到的数据。RV-sensor输出三个数据:x*sin(theta/2)y*sin(theta/2)z*sin(theta/2)sin(