傳感器類型
動(dòng)作傳感器
這類傳感器在三個(gè)軸(X、Y、Z)上測(cè)量加速度和旋轉(zhuǎn)角度。包括如下幾個(gè)傳感器。
重力(gravity)傳感器
旋轉(zhuǎn)向量(rotational vector)傳感器
環(huán)境傳感器
這類傳感器可以測(cè)量不同環(huán)境的參數(shù),例如周圍環(huán)境的空氣溫度和壓強(qiáng)、光照強(qiáng)度和濕度。包括如下幾個(gè)傳感器。
溫度(barometer)傳感器
光線(photometer)傳感器
溫度(thermometer)傳感器
壓力(pressure)傳感器
位置傳感器
這類傳感器可以測(cè)量設(shè)備的物理位置。包括如下幾個(gè)傳感器。
方向(orientation)傳感器(數(shù)據(jù)來自加速傳感器和磁場(chǎng)傳感器)
磁場(chǎng)(magnetomenter)傳感器
安卓傳感器類型
TYPE_ACCELEROMETER //加速度傳感器(硬件)
TYPE_MAGNETIC_FIELD //磁場(chǎng)傳感器(硬件)
TYPE_ORIENTATION //方向傳感器(軟件傳感器,數(shù)據(jù)來自重力和磁場(chǎng)傳感器)
TYPE_GYROSCOPE //陀螺儀傳感器(硬件)
TYPE_LIGHT //光線傳感器(硬件)
TYPE_PRESSURE //壓力傳感器(硬件)
TYPE_PROXIMITY //臨近傳感器(硬件)
TYPE_GRAVITY //重場(chǎng)傳感器(硬件或軟件)
TYPE_LINEAR_ACCELERATION //線性加速度傳感器(硬件或軟件)
TYPE_ROTATION_VECTOR //旋轉(zhuǎn)矢量傳感器(硬件或軟件)
TYPE_RELATIVE_HUMIDITY //濕度傳感器(硬件)
TYPE_AMBIENT_TEMPERATURE //溫度傳感器(硬件)
TYPE_TEMPERATURE //溫度傳感器(硬件),從Android4.0開始被TYPE_AMBIENT_TEMPERATURE取代
安卓傳感器參數(shù)
傳感器回調(diào)頻率
參數(shù)延遲時(shí)間
SensorManager.SENSOR_DELAY_FASTEST0ms
SensorManager.SENSOR_DELAY_GAME20ms
SensorManager.SENSOR_DELAY_UI60ms
SensorManager.SENSOR_DELAY_NORMAL200ms
傳感器返回值@link
加速度感應(yīng)檢測(cè)——Accelerometer
Accelerometer Sensor測(cè)量的是所有施加在設(shè)備上的力所產(chǎn)生的加速度的負(fù)值(包括重力加速度)。加速度所使用的單位是m/sec^2,數(shù)值是加速度的負(fù)值。
SensorEvent.values[0]:加速度在X軸的負(fù)值
SensorEvent.values[1]:加速度在Y軸的負(fù)值
SensorEvent.values[2]:加速度在Z軸的負(fù)值
例如:
當(dāng)手機(jī)Z軸朝上平放在桌面上,并且從左到右推動(dòng)手機(jī),此時(shí)X軸上的加速度是正數(shù)。
當(dāng)手機(jī)Z軸朝上靜止放在桌面上,此時(shí)Z軸的加速度是+9.81m/sec^2。
當(dāng)手機(jī)從空中自由落體,此時(shí)加速度是0
當(dāng)手機(jī)向上以Am/sec^2的加速度向空中拋出,此時(shí)加速度是A+9.81m/sec^2
重力加速度感應(yīng)檢測(cè)——Gravity
重力加速度,其單位是m/sec^2,其坐標(biāo)系與Accelerometer使用的一致。當(dāng)手機(jī)靜止時(shí),gravity的值和Accelerometer的值是一致的。
線性加速度感應(yīng)檢測(cè)——Linear-Acceleration
Accelerometer、Gravity和Linear-Acceleration三者的關(guān)系如下公式:
accelerometer = gravity +linear-acceleration
地磁場(chǎng)感應(yīng)檢測(cè)——Magnetic-field
地磁場(chǎng)的單位是micro-Tesla(uT),檢測(cè)的是X、Y、Z軸上的絕對(duì)地磁場(chǎng)。
陀螺儀感應(yīng)檢測(cè)——Gyroscope
陀螺儀的單位是弧度/秒,測(cè)量的是物體分別圍繞X,Y,Z軸旋轉(zhuǎn)的角速度。它的坐標(biāo)系與加速度傳感器的坐標(biāo)系相同。逆時(shí)針方向旋轉(zhuǎn)的角度正的。也就是說,如果設(shè)備逆時(shí)針旋轉(zhuǎn),觀察者向X,Y,Z軸的正方向看去,就報(bào)告設(shè)備是正轉(zhuǎn)的。請(qǐng)注意,這是標(biāo)準(zhǔn)的正旋轉(zhuǎn)的數(shù)學(xué)定義。
光線感應(yīng)檢測(cè)——Light
values[0]:表示環(huán)境光照的水平,單位是SI lux。
位置逼近感應(yīng)檢測(cè)——Proximity
values[0]:逼近的距離,單位是厘米(cm)。有一些傳感器只能支持近和遠(yuǎn)兩種狀態(tài),這種情況下,傳感器必須報(bào)告它在遠(yuǎn)狀態(tài)下的maximum_range值和在近狀態(tài)下的小值。
旋轉(zhuǎn)矢量感應(yīng)檢測(cè)——Rotation Vector
旋轉(zhuǎn)向量是用來表示設(shè)備的方向,它是由角度和軸組成,就是設(shè)備圍繞x,y,z軸之一旋轉(zhuǎn)θ角度。旋轉(zhuǎn)向量的三個(gè)要素是,這樣旋轉(zhuǎn)向量的大小等于sin(θ/2),旋轉(zhuǎn)向量的方向等于旋轉(zhuǎn)軸的方向。
values[0]: x*sin(θ/2)
values[1]: y*sin(θ/2)
values[2]: z*sin(θ/2)
values[3]: cos(θ/2) (optional: only ifvalue.length = 4)
方向感應(yīng)檢測(cè)——Orientation
其單位是角度
values[0]: Azimuth(方位),地磁北方向與y軸的角度,圍繞z軸旋轉(zhuǎn)(0到359)。0=North,90=East, 180=South, 270=West
values[1]: Pitch(俯仰),圍繞X軸旋轉(zhuǎn)(-180 to180), 當(dāng)Z軸向Y軸運(yùn)動(dòng)時(shí)是正值
values[2]: Roll(滾),圍繞Y軸旋轉(zhuǎn)(-90 to 90),當(dāng)X軸向Z軸運(yùn)動(dòng)時(shí)是正值
API:
獲取系統(tǒng)支持傳感器類型 /** * 支持傳感器列表 * http://blog.csdn.net/redoq/article/details/52515123 * https://zhidao.baidu.com/question/2205380242168742428.html * http://www.jianshu.com/p/4c141d851346 */ private void testSupportSensorList(){ SensorManager sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); String sensorStr = “”; List《Sensor》 list = sensorManager.getSensorList(Sensor.TYPE_ALL); for (Sensor sensor:list){ sensorStr += sensor.getName() + “\n”; } XLog.i(sensorStr); sensorStr = “”; for (Sensor sensor:list){ switch (sensor.getType()){ case Sensor.TYPE_ACCELEROMETER: sensorStr += “加速度傳感器” + “\n”; break; case Sensor.TYPE_MAGNETIC_FIELD: sensorStr += “磁場(chǎng)傳感器” + “\n”; break; case Sensor.TYPE_ORIENTATION: sensorStr += “方向傳感器” + “\n”; break; case Sensor.TYPE_GYROSCOPE: sensorStr += “陀螺儀傳感器” + “\n”; break; case Sensor.TYPE_LIGHT: sensorStr += “光線傳感器” + “\n”; break; case Sensor.TYPE_PRESSURE: sensorStr += “壓力傳感器” + “\n”; break; case Sensor.TYPE_PROXIMITY: sensorStr += “臨近傳感器” + “\n”; break; case Sensor.TYPE_GRAVITY: sensorStr += “重場(chǎng)傳感器” + “\n”; break; case Sensor.TYPE_LINEAR_ACCELERATION: sensorStr += “線性加速度傳感器” + “\n”; break; case Sensor.TYPE_ROTATION_VECTOR: sensorStr += “旋轉(zhuǎn)矢量傳感器” + “\n”; case Sensor.TYPE_RELATIVE_HUMIDITY: sensorStr += “濕度傳感器” + “\n”; break; case Sensor.TYPE_AMBIENT_TEMPERATURE: sensorStr += “溫度傳感器” + “\n”; break; case Sensor.TYPE_TEMPERATURE: sensorStr += “溫度傳感器” + “\n”; break; } } XLog.i(sensorStr);}傳感器使用步驟(通用)s1、使用傳感器之前首先獲取SensorManager通過系統(tǒng)服務(wù)獲?。篠ensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); s2、獲取我們需要的傳感器類型://單次有效計(jì)步Sensor mStepCount = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);//系統(tǒng)計(jì)步累加值Sensor mStepDetector = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_DETECTOR); s3、注冊(cè)監(jiān)聽者(監(jiān)聽傳感器事件)mSensorManager.registerListener(this, mStepDetector, SensorManager.SENSOR_DELAY_FASTEST);mSensorManager.registerListener(this, mStepCount, SensorManager.SENSOR_DELAY_FASTEST); PS:取消注冊(cè):mSensorManager.unregisterListener(this, mStepDetector);mSensorManager.unregisterListener(this, mStepCount); s4、實(shí)現(xiàn)SensorEventListener接口,重寫方法并獲取數(shù)據(jù)@Overridepublic void onSensorChanged(SensorEvent event)