位置傳感器Position Sensors
Android平台提供了兩種決定設備位置的傳感器:
地磁場傳感器和方向傳感器(the geomagnetic field sensor and the orientation sensor)。
還有一種傳感器用於檢測設備正面和其他物體的距離,叫做接近傳感器(proximity sensor)。
地磁場傳感器和接近傳感器是基於硬件的。
方向傳感器是基於軟件的,它的數據是根據加速度計和地磁場傳感器導出的。
但是方向傳感器自從Android 2.2 (API Level 8)開始就被廢棄了。
位置傳感器也是返回一個多維向量,放在 SensorEvent
中的values數組中。
返回值見表:
方向傳感器Orientation Sensor
方向傳感器是根據地磁場傳感器和加速度計推導出輸出數據的。
使用這兩個硬件傳感器,方向傳感器為下面三個方向提供了數據:
1. Azimuth:繞Z軸旋轉的度數。這是設備的y軸和地磁場北極的夾角。比如,設備的y軸指向東,這個度數就為90。
2. Pitch:繞X軸旋轉的度數。當設備的z軸朝着y軸正向旋轉時,這個值是正值,反之,當設備的z軸朝着y軸的負向旋轉時,這個值為負值。它的取值范圍是-180到180。
3. Roll:繞Y軸旋轉的度數。當設備的z軸朝着x軸正向旋轉時,這個值是正值,反之,當設備的z軸朝着x軸的負向旋轉時,這個值為負值。它的取值范圍是-90到90。
注意這個定義是非常特殊的,因為它在順時針旋轉的時候是正值,而數學上總是逆時針為正值。
因為方向傳感器需要大量的處理運算,所以它的准確度和精度都有所下降。后來,自Android 2.2 (API level 8),方向傳感器被廢棄。
官方建議使用下面的方法:
利用getRotationMatrix()結合getOrientation()方法可以計算方向值。
還可以利用remapCoordinateSystem()把方向值轉換到你的應用的參考坐標系。
地磁場傳感器Geomagnetic Field Sensor
地磁場傳感器監測地球地磁場變化。
傳感器提供三個坐標上的原始的磁場強度值(in μT)。
一般情況下,你不需要直接使用這個傳感器,你可以使用旋轉向量傳感器來決定原始的旋轉運動;你也可以使用加速度計和地磁場傳感器並結合getRotationMatrix()方法來獲得旋轉矩陣和傾斜矩陣。
你可以結合 getOrientation()
和 getInclination()
方法來使用這些矩陣,從而得到方位和地磁場偏移數據。
接近傳感器Proximity Sensor
接近傳感器可以讓你得到設備離另一個物體的距離。
接近傳感器通常用於檢測設備正面和用戶頭部的距離,比如用戶正在打電話。
大多數Proximity Sensor返回絕對的距離數值,以cm為單位。但是也有一些只返回近或者遠。
參考資料
API Guides: Position Sensors
http://developer.android.com/guide/topics/sensors/sensors_position.html