Android平台提供了幾個能夠監視裝置移動的感應器。其中的兩個是基於硬體的(加速度感應器和陀螺儀),有三個感應器既可以是基於硬體的,也可以是基於軟體的(重力感應器、線性加速度感應器和旋轉向量感應器)。例如,在某些基於軟體感應器的裝置上會從加速度感應器和磁力儀中提取它們的資料,但是在其他的裝置上,它們也可以使用陀螺儀來提取資料。大多數Android裝置都有加速度感應器和陀螺儀。基於軟體的感應器的有效性是可變的,因為它們要依賴一個或多個硬體感應器來提取對應的資料。
動作感應器用於監視裝置的移動,如:傾斜、震動、旋轉或擺動。移動通常是直接的使用者輸入的反映(如,使用者在遊戲中操作汽車或控制一個球),但也能夠是裝置所處的實體環境的反映(如,駕駛汽車時的位置移動)。在第一種情境中,你要相對於裝置的參照系或應用程式的參照系來監視裝置的移動,在第二種情境中,你要相對於全球參照系來監視裝置的移動。
通常,移動感應器本身並不用於監視裝置的位置,但它們能夠跟其他感應器一起來使用,例如跟地磁感應器一起來判斷裝置相對於全球參照系統的的位置(更多資訊,請看定位感應器)。
所有的移動感應器的每個SensorEvent都會返回感應器值的多維陣列。例如,一個加速度感應器的感應器事件會返回三個座標軸方向的加速度力,陀螺儀會返回三個座標軸方向旋轉速率。這些資料是以float數組的形式跟SensorEvent參數一起被返回的。表1概要介紹了Android平台上可用的移動感應器。
表1.Android平台所支援的移動感應器
感應器
感應器資料
描述
測量單位
TYPE_ACCELEROMETER
SensorEvent.values[0]
X軸方向的加速力(包括重力)
m/s2
SensorEvent.values[1]
Y軸方向的加速力(包括重力)
SensorEvent.values[2]
Z軸方向的加速力(包括重力)
TYPE_GRAVITY
SensorEvent.values[0]
X軸方向的重力
m/s2
SensorEvent.values[1]
Y軸方向的重力
SensorEvent.values[2]
Z軸方向的重力
TYPE_GYROSCOPE
SensorEvent.values[0]
繞著X軸的旋轉率
rad/s
SensorEvent.values[1]
繞著Y軸的旋轉率
SensorEvent.values[2]
繞著Z軸的旋轉率
TYPE_LINEAR_ACCELERATION
SensorEvent.values[0]
X軸方向的加速力(不含重力
m/s2
SensorEvent.values[1]
Y軸方向的加速力(不含重力
SensorEvent.values[2]
Z軸方向的加速力(不含重力
TYPE_ROTATION_VECTOR
SensorEvent.values[0]
沿著X軸的旋轉向量(x* sin(θ/2)).
無單位
SensorEvent.values[1]
沿著Y軸的旋轉向量(y* sin(θ/2)).
SensorEvent.values[2]
沿著Z軸的旋轉向量(z* sin(θ/2)).
SensorEvent.values[3]
旋轉向量的標量部分((cos(θ/2)).1
1標量部分是一個可選值。
對於移動檢測和監視,旋轉向量感應器和重力感應器是使用頻率最高的感應器。旋轉向量感應器尤其靈活,可廣泛的應用於移動相關的任務,如,檢測手勢、監視角度變化、監視相對的方向變化等。例如:如果你正在開發一款使用2維或3維羅盤來增強現實感遊戲,或增強相機的穩定性的應用程式,那麼旋轉向量感應器是非常理想的選擇。在大多情境中,使用這些感應器比使用加速度感應器和地磁感應器或方向感應器要好。