做自(zì)由與創造的先行者

Android位置傳感器

Android開(kāi)發手冊

Android 平台提供以下(xià)兩種傳感器,以幫助您确定設備的位置:地磁場傳感器和(hé)加速度計(jì)。Android 平台還提供一種傳感器,可幫助您确定設備表面與物體的鄰近程度(名爲近程傳感器)。地磁場傳感器和(hé)近程傳感器均基于硬件。大(dà)部分手機和(hé)平闆電腦(nǎo)制造商都在其設備中内置地磁場傳感器。同樣,手機制造商通常還會(huì)在其設備中内置近程傳感器,以确定手機與用(yòng)戶臉部的靠近程度(例如,在手機通話(huà)期間)。您可以使用(yòng)設備加速度計(jì)和(hé)地磁場傳感器的讀數,确定設備的屏幕方向。

注意:Android 2.2(API 級别 8)已棄用(yòng)方向傳感器,Android 4.4W(API 級别 20)已棄用(yòng)方向傳感器類型。

位置傳感器對(duì)于确定設備在世界參照系中的物理(lǐ)位置很(hěn)有用(yòng)。例如,您可以結合使用(yòng)地磁場傳感器和(hé)加速度計(jì)來(lái)确定設備相對(duì)于磁北極點的位置。您還可以使用(yòng)這(zhè)兩種傳感器,在應用(yòng)的參照系中确定設備的屏幕方向。位置傳感器通常不會(huì)用(yòng)于監測設備的移動或運動情況,例如晃動、傾斜,或沖擊(詳情請(qǐng)參閱運動傳感器)。

地磁場傳感器和(hé)加速度計(jì)會(huì)爲每個 SensorEvent 返回傳感器值的多維數組。例如,地磁場傳感器提供單個傳感器事(shì)件中所有三個坐(zuò)标軸的地磁場強度值。同樣,加速度計(jì)傳感器測量傳感器事(shì)件中施加到(dào)設備的加速度。如需了(le)解有關傳感器所用(yòng)坐(zuò)标系的詳細信息,請(qǐng)參閱傳感器坐(zuò)标系。近程傳感器會(huì)爲每個傳感器事(shì)件提供一個值。表 1 總結了(le) Android 平台支持的位置傳感器。

表 1. Android 平台支持的位置傳感器。

傳感器 傳感器事(shì)件數據 說明(míng) 度量單位
TYPE_GAME_ROTATION_VECTOR SensorEvent.values[0] 沿 x 軸的旋轉矢量分量 (x * sin(θ/2))。 無單位
SensorEvent.values[1] 沿 y 軸的旋轉矢量分量 (y * sin(θ/2))。
SensorEvent.values[2] 沿 z 軸的旋轉矢量分量 (z * sin(θ/2))。
TYPE_GEOMAGNETIC_ROTATION_VECTOR SensorEvent.values[0] 沿 x 軸的旋轉矢量分量 (x * sin(θ/2))。 無單位
SensorEvent.values[1] 沿 y 軸的旋轉矢量分量 (y * sin(θ/2))。
SensorEvent.values[2] 沿 z 軸的旋轉矢量分量 (z * sin(θ/2))。
TYPE_MAGNETIC_FIELD SensorEvent.values[0] 沿 x 軸的地磁場強度。 微特斯拉
SensorEvent.values[1] 沿 y 軸的地磁場強度。
SensorEvent.values[2] 沿 z 軸的地磁場強度。
TYPE_MAGNETIC_FIELD_UNCALIBRATED SensorEvent.values[0] 沿 x 軸的地磁場強度(無硬鐵(tiě)校準功能(néng))。 微特斯拉
SensorEvent.values[1] 沿 y 軸的地磁場強度(無硬鐵(tiě)校準功能(néng))。
SensorEvent.values[2] 沿 z 軸的地磁場強度(無硬鐵(tiě)校準功能(néng))。
SensorEvent.values[3] 沿 x 軸的鐵(tiě)偏差估算(suàn)。
SensorEvent.values[4] 沿 y 軸的鐵(tiě)偏差估算(suàn)。
SensorEvent.values[5] 沿 z 軸的鐵(tiě)偏差估算(suàn)。
TYPE_ORIENTATION1 SensorEvent.values[0] 方位角(繞 z 軸的角度)。
SensorEvent.values[1] 俯仰角(繞 x 軸的角度)。
SensorEvent.values[2] 傾側角(繞 y 軸的角度)。
TYPE_PROXIMITY SensorEvent.values[0] 與物體的距離。2 厘米

1Android 2.2(API 級别 8)已棄用(yòng)此傳感器,Android 4.4W(API 級别 20)已棄用(yòng)此傳感器類型。傳感器框架提供用(yòng)于獲取設備屏幕方向的備用(yòng)方法,計(jì)算(suàn)設備的屏幕方向對(duì)此有所闡述。

2 某些(xiē)近程傳感器隻提供二進制值來(lái)表示遠和(hé)近。

使用(yòng)遊戲旋轉矢量傳感器

除了(le)不使用(yòng)地磁場,遊戲旋轉矢量傳感器與旋轉矢量傳感器完全相同。因此,Y 軸不會(huì)指向北方,而會(huì)指向其他(tā)參照。當陀螺儀繞 Z 軸漂移時(shí),該參照可以漂移相同的數量級。

遊戲旋轉矢量傳感器不使用(yòng)磁場,因此相對(duì)旋轉更準确,且不受磁場變化的影響。如果您不在意北方在哪裏,并且由于依賴磁場,正常旋轉矢量不符合您的需求,則請(qǐng)在遊戲中使用(yòng)此傳感器。

使用(yòng)地磁旋轉矢量傳感器

地磁旋轉矢量傳感器與旋轉矢量傳感器類似,但(dàn)前者使用(yòng)磁力計(jì)而非陀螺儀。此傳感器的精度比普通旋轉矢量傳感器低(dī),但(dàn)能(néng)耗也(yě)有所降低(dī)。如果您希望在不消耗過多電量的情況下(xià)收集後台中的某些(xiē)旋轉信息,則可以僅使用(yòng)此傳感器。與批處理(lǐ)結合使用(yòng)時(shí),此傳感器最爲有用(yòng)。

計(jì)算(suàn)設備的屏幕方向

通過計(jì)算(suàn)設備的屏幕方向,您可以監測設備相對(duì)于地球參照系(具體爲磁北極)的位置。

系統使用(yòng)設備的地磁場傳感器和(hé)加速度計(jì)來(lái)計(jì)算(suàn)屏幕方向的角度。通過使用(yòng)這(zhè)兩個硬件傳感器,系統可提供以下(xià)三個屏幕方向角度的數據:

方位角(繞 z 軸旋轉的角度)。此爲設備當前指南針方向與磁北向之間的角度。如果設備的上(shàng)邊緣面朝磁北向,則方位角爲 0 度;如果上(shàng)邊緣朝南,則方位角爲 180 度。與之類似,如果上(shàng)邊緣朝東,則方位角爲 90 度;如果上(shàng)邊緣朝西,則方位角爲 270 度。

俯仰角(繞 x 軸旋轉的角度)。此爲平行于設備屏幕的平面與平行于地面的平面之間的角度。如果将設備與地面平行放(fàng)置,且其下(xià)邊緣最靠近您,同時(shí)将設備上(shàng)邊緣向地面傾斜,則俯仰角将變爲正值。沿相反方向傾斜(将設備上(shàng)邊緣向遠離地面的方向移動)将使俯仰角變爲負值。值的範圍爲 -180 度到(dào) 180 度。

傾側角(繞 y 軸旋轉的角度)。此爲垂直于設備屏幕的平面與垂直于地面的平面之間的角度。如果将設備與地面平行放(fàng)置,且其下(xià)邊緣最靠近您,同時(shí)将設備左邊緣向地面傾斜,則側傾角将變爲正值。沿相反方向傾斜(将設備右邊緣移向地面)将使側傾角變爲負值。值的範圍爲 -90 度到(dào) 90 度。

注意:傳感器的側傾角定義已更改,目的是反映地理(lǐ)傳感器生态系統中的絕大(dà)部分實現(xiàn)。

請(qǐng)注意,這(zhè)些(xiē)角度使用(yòng)的坐(zuò)标系與航空(kōng)領域所用(yòng)的坐(zuò)标系(針對(duì)偏航、俯仰和(hé)側傾)不同。在航空(kōng)系統中,x 軸沿飛(fēi)機的長邊,從(cóng)機尾到(dào)機頭。

屏幕方向傳感器通過處理(lǐ)來(lái)自(zì)加速度計(jì)和(hé)地磁場傳感器的原始傳感器數據來(lái)獲取其數據。由于涉及繁重處理(lǐ),屏幕方向傳感器的準确度和(hé)精度會(huì)降低(dī)。具體而言,此傳感器僅在側傾角爲 0 時(shí)才可靠。因此,Android 2.2(API 級别 8)已棄用(yòng)屏幕方向傳感器,Android 4.4W(API 級别 20)已棄用(yòng)屏幕方向傳感器類型。我們建議(yì)不要使用(yòng)來(lái)自(zì)屏幕方向傳感器的原始數據,而是結合使用(yòng) getRotationMatrix() 方法和(hé) getOrientation() 方法來(lái)計(jì)算(suàn)屏幕方向值

使用(yòng)地磁場傳感器

借助地磁場傳感器,您可以監測地球磁場的變化。

此傳感器提供三個坐(zuò)标軸中每個坐(zuò)标軸的原始場強數據(以微特斯拉爲單位)。通常,您無需直接使用(yòng)此傳感器。您可以改用(yòng)旋轉矢量傳感器來(lái)确定原始旋轉運動,或者将加速度計(jì)和(hé)地磁場傳感器與 getRotationMatrix() 方法結合使用(yòng),以獲得旋轉矩陣和(hé)傾角矩陣。然後,您可以将這(zhè)些(xiē)矩陣與 getOrientation() 和(hé) getInclination() 方法一起使用(yòng),以獲取方位角和(hé)地磁傾斜度數據。

注意:在測試您的應用(yòng)時(shí),您可以通過按數字 8 的圖案揮動設備來(lái)提高(gāo)傳感器的準确性。

使用(yòng)未經校準的磁力計(jì)

未經校準的磁力計(jì)與地磁場傳感器類似,不同之處在于未對(duì)磁場應用(yòng)硬鐵(tiě)校準。出廠(chǎng)校準和(hé)溫度補償仍應用(yòng)于磁場。未經校準的磁力計(jì)可用(yòng)于處理(lǐ)不良的硬鐵(tiě)估算(suàn)。通常,geomagneticsensor_event.values[0] 将接近 uncalibrated_magnetometer_event.values[0] - uncalibrated_magnetometer_event.values[3]。即,

calibrated_x ~= uncalibrated_x - bias_estimate_x

注意:未經校準的傳感器可提供更多的原始結果,并且可能(néng)會(huì)包含一定偏差,但(dàn)其測量值包含的從(cóng)應用(yòng)的校正到(dào)校準的跳躍次數更少。某些(xiē)應用(yòng)可能(néng)更喜歡這(zhè)些(xiē)未經校準的結果,因爲它們更平滑、更可靠。例如,如果應用(yòng)嘗試進​​行自(zì)己的傳感器融合,則引入校準實際上(shàng)可能(néng)會(huì)扭曲結果。

除磁場外(wài),未經校準的磁力計(jì)還提供每個軸上(shàng)的估算(suàn)硬鐵(tiě)偏差。

使用(yòng)近程傳感器

近程傳感器可讓您确定物體與設備的距離。

網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發
下(xià)一篇:Android環境傳感器
上(shàng)一篇:Android運動傳感器