Android平台下的感應器包括加速度感應器(Accelerometer)、姿態感應器(Orientation)、磁場感應器(Magnetic Field)和光感應器(Light)。
Android 平台下感應器應用的開發通過監聽器機制來實現,要針對某一種或多種感應器開發應用,主要的步驟如下:
1. 建立SensorManager對象
2. 實現SensorListener介面
這是開發感應器應用最主要的工作,實現SensorListener介面主要需要實現一下兩個方法。
- void onAccuracyChanged(int sensor, int accuracy):該方法在感應器的精確度發生變化時調用,SensorManager提供了3種精確度,由高到低分別為:SENSOR_STATUS_ACCURACY_HIGH、SENSOR_STATUS_ACCURACY_MEDIUM和SENSOR_STATUS_ACCURACY_LOW。參數accuracy為新的精確度。
- void onSensorChanged(int sensor, float[] values):該方法在感應器的資料發生變化時調用,開發感應器應用的主要的業務代碼應該放在這裡執行,如讀取資料並根據資料的變化進行相應的操作等。方法傳入的參數sensor為代表感應器類型的常量,values為float類型數組,其長度和內容因感應器類型的不同而變化。
3. 註冊SensorListener
- 開發玩SensorListener之後,剩下的工作就是在程式的適當位置註冊監聽和取消監聽了。在這裡調用步驟1中獲得的SensorManager對象的registerListener方法來註冊監聽器,其接收的參數為監聽器對象、感應器類型以及感應器事件傳遞的頻度。
- 取消註冊SensorListener時調用SensorManager的unregisterListener方法,一般來講註冊和取消註冊的方法應該成對出現,如果在Activity的onResume方法中註冊SensorListener監聽就應在onPause方法中取消註冊。
常用感應器簡介
1>. 加速度感應器Accelerometer
加速度感應器主要感應手機的運動,在註冊了感應器監聽器後加速度感應器主要捕獲3個參數values[0]、values[1]、values[2]。
values[0]:空間座標系中x軸方向上的加速度減去重力加速度減去中立加速度在x軸上的分量。
values[1]:空間座標系中x軸方向上的加速度減去重力加速度減去中立加速度在y軸上的分量。
values[2]:空間座標系中x軸方向上的加速度減去重力加速度減去中立加速度在z軸上的分量。
上述3個資料的單位均為米每二次方秒。
距離說明:
1.當手機平放到案頭靜止時,加速度為重力加速度g,通過0減去-g(重力加速度g方向為z軸反方向,故為負值)得到values[2]為g。
2.如果把手機水平方向右推,此時手機x方向上的加速度為正,即values[0]為正。
3.當把手機以a米每二次方秒的加速度豎值向上舉時,values[2]的傳回值為(a+g)米每二次方秒,通過a減去-g得到。
2>.姿態感應器Orientation
姿態感應器主要感應手機方位的變化,其每次讀取的都是靜態狀態值,在註冊了感應器監聽器後姿態感應器主要捕獲3個參數values[0]、values[1]、values[2],分別代表手機沿Yaw軸、Pitch軸和Roll軸轉過的角度。
1.Yaw軸是3個方向軸中唯一不變的軸,其方向總是豎直向上,和空間座標系中的z軸是等同的,也就是中立加速度g的反方向。
2.Pitch軸方向依賴於手機沿Yaw軸的轉動情況,即當手機沿Yaw轉過一定角度後,Pitch軸也相應圍繞Yaw軸轉過相同的角度。Pitch軸的位置依賴於手機沿Yaw軸轉過的角度,好比Yaw軸和Pitch軸是兩個焊死在一起成90度夾角的鐵棍。
3.Roll軸的方向雖然依賴於手機沿Yaw軸和Pitch軸轉動的情況,但是Roll軸的確定並不複雜,Roll軸與手機之間的相對關係是固定的。其總是沿著手機螢幕長邊正方向。
註:
1.Yaw軸永遠是豎直向上的方向,因為額在駕駛飛機的時候無論飛機如何旋轉/翻滾/飛行員都必須確定向上的舉對方向。
2.Pitch軸會隨著Yaw軸旋轉,實際上Pitch軸方向可以通過推算飛機的朝向,繞Pitch軸旋轉表示飛機上拉(抬頭起機)或下推(機頭向下)
3.Roll軸表示貫穿機身的軸,與飛機是相對靜止的,飛機繞Roll軸旋轉左傾或右傾。
3>.其他感應器
1. 磁場感應器Magnetic Field
磁場感應器主要用於感應周圍的磁感應強度,註冊監聽器後其主要捕獲3個參數:values[0]、values[1]、values[2]。3個參數分別代表磁感應強度在空間座標系中3個方向軸上的分量,所有資料的單位為uT,即微特拉斯。
2. 光感應器Light
光感應器用於感應周圍的光強,註冊監聽器後只捕獲一個參數:values[0]。該參數代表周圍的光照強度,單位為勒克斯(lux)。
3. 距離感應器 Proximity
距離感應器用於感應周圍靠近的物體,在注註冊監聽器後只捕獲一個參數:values[0]。該參數代表感應器的物體距離,以厘米為單位。