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