本節說明感應器軸、基礎感應器和複合感應器 (活動、姿態、未校準和互動)。
感應器軸
許多感應器的感應器事件值會以特定框架表示,該框架相對於裝置是靜態的。
行動裝置軸
感應器 API 只會參考螢幕的自然方向 (裝置螢幕方向改變時,軸不會交換)。

圖 1. Sensor API 使用的座標系統 (相對於行動裝置)
汽車類 - 軸
在 Android Automotive 實作中,軸是根據車身框架定義。車輛參考架構的原點是後軸中心。車輛參考架構的方向如下:
- X 軸指向右側,位於水平面上,垂直於車輛的對稱平面。
- Y 軸指向前方,位於水平平面上。

圖 2. Sensor API 使用的座標系統 (相對於車輛裝置)
車輛參考架構是右手座標系統。因此,Z 軸會向上指。
參考架構的 Z 軸會與重力對齊,也就是說 X 軸和 Y 軸都是水平。因此 Y 軸不一定會通過前軸。
基本感應器
基礎感應器類型是以所代表的實體感應器命名。這些感應器會轉送單一實體感應器的資料 (而非從其他感應器產生資料的複合感應器)。基礎感應器類型範例如下:
SENSOR_TYPE_ACCELEROMETER
SENSOR_TYPE_GYROSCOPE
SENSOR_TYPE_MAGNETOMETER
不過,基礎感應器並不等於基礎實體感應器,也不應與基礎實體感應器混淆。基礎感應器資料並非實體感應器的原始輸出內容,因為系統會套用修正措施 (例如偏差補償和溫度補償)。
舉例來說,在下列用途中,基礎感應器的特性可能與其基礎實體感應器的特性不同:
- 陀螺儀晶片,偏壓範圍為 1 度/秒。
- 完成原廠校正後,系統會套用溫度補償和偏誤補償,Android 感應器的實際偏誤就會減少,甚至可保證偏誤低於 0.01 度/秒。
- 在這種情況下,即使基礎感應器的資料表指出偏差為 1 deg/sec,我們仍會說 Android 感應器的偏差低於 0.01 deg/sec。
- 耗電量為 100 uW 的氣壓計。
- 由於產生的資料需要從晶片傳輸至 SoC,從氣壓計 Android 感應器收集資料的實際電力成本可能會高出許多,例如 1000 uW。
- 在這種情況下,即使氣壓計晶片引線測得的耗電量為 100 uW,我們仍會說 Android 感應器的耗電量為 1000 uW。
- 磁力計在校準時會消耗 100 uW,但校準時會消耗更多電量。
- 校正程序可能需要啟用陀螺儀,耗用 5000 uW,並執行某些演算法,再耗用 900 uW。
- 在這種情況下,我們說 Android 感應器 (磁力計) 的最大耗電量為 6000 uW。
- 在這種情況下,平均耗電量是更有用的測量指標,也是透過 HAL 在感應器靜態特徵中回報的指標。
加速計
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)
傳回非喚醒感應器
加速計感應器會回報裝置沿著三個感應器軸的加速度。測得的加速度包括物理加速度 (速度變化) 和重力。測量結果會回報至 sensors_event_t.acceleration 的 x、y 和 z 欄位。
所有值都採用國際單位制 (m/s^2),並測量裝置的加速度,減去沿著三個感應器軸的重力。
以下列舉幾個例子:
- 自由落體時,(x、y、z) 的範數應接近 0。
- 如果裝置平放在桌上,並從左側向右推動,x 軸加速度值會是正數。
- 如果裝置平放在桌上,沿著 z 軸的加速度值為 +9.81 alo,這對應於裝置的加速度 (0 m/s^2) 減去重力 (-9.81 m/s^2)。
- 如果將裝置平放在桌上,然後向上推,加速度值會大於 +9.81,這對應於裝置的加速度 (+A m/s^2) 減去重力 (-9.81 m/s^2)。
讀數校正方式如下:
- 溫度補償
- 線上偏差校正
- 線上校正體重計
偏誤和比例校準只能在感應器停用時更新,以免串流期間的值發生跳動。
加速計也會透過 sensors_event_t.acceleration.status
回報預期讀數的準確度。如要進一步瞭解這個欄位的可能值,請參閱
SensorManager
的
SENSOR_STATUS_*
常數。
環境溫度
報表模式:On-change
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE)
傳回非喚醒感應器
這個感應器會提供環境 (室內) 溫度,單位為攝氏。
磁場感應器
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD)
傳回非喚醒感應器
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
磁場感應器 (也稱為磁力計) 會回報沿著三個感應器軸測量的環境磁場。
測量結果會顯示在 sensors_event_t.magnetic
的 x、y 和 z 欄位中,所有值都以微特斯拉 (uT) 為單位。
磁力計也會透過 sensors_event_t.magnetic.status
回報預期讀數的準確度。如要進一步瞭解這個欄位的可能值,請參閱
SensorManager
的
SENSOR_STATUS_*
常數。
讀數校正方式如下:
- 溫度補償
- 工廠 (或線上) 軟鐵校正
- 線上硬鐵校正
陀螺儀
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_GYROSCOPE)
傳回非喚醒感應器
陀螺儀感應器會回報裝置繞三軸旋轉的速率。
旋轉方向為逆時針 (右手定則)。 也就是說,如果觀察者從 x、y 或 z 軸上的某個正向位置,觀察位於原點的裝置,且裝置看起來是逆時針旋轉,就會回報正向旋轉。請注意,這是正向旋轉的標準數學定義,與航空太空領域的滾轉定義不同。
測量結果會顯示在 sensors_event_t.gyro
的 x、y 和 z 欄位中,所有值都以每秒弧度 (rad/s) 為單位。
讀數校正方式如下:
- 溫度補償
- 工廠 (或線上) 規模補償
- 線上偏差校正 (移除漂移)
陀螺儀也會透過 sensors_event_t.gyro.status
回報預期讀取的準確度。如要進一步瞭解這個欄位的可能值,請參閱
SensorManager
的
SENSOR_STATUS_*
常數。
陀螺儀無法根據磁力計和加速度計進行模擬,因為這樣會導致陀螺儀的本機一致性和回應速度降低。必須以一般陀螺儀晶片為基礎。
心率
報表模式:On-change
getDefaultSensor(SENSOR_TYPE_HEART_RATE)
傳回非喚醒感應器
心率感應器會回報觸碰裝置者的目前心率。
系統會在 sensors_event_t.heart_rate.bpm
中回報目前的心率 (每分鐘心跳次數),並在 sensors_event_t.heart_rate.status
中回報感應器狀態。如要進一步瞭解這個欄位的可能值,請參閱
SensorManager
的
SENSOR_STATUS_*
常數。具體來說,首次啟用時,除非裝置已知不在身上,否則第一個事件的狀態欄位必須設為 SENSOR_STATUS_UNRELIABLE
。由於這項感應器會在狀態變更時觸發事件,因此只有在 heart_rate.bpm
或 heart_rate.status
自上次事件後發生變化時,才會產生事件。系統產生事件的頻率不會超過每 sampling_period
一次。
架構會自動將 sensor_t.requiredPermission
覆寫為適當的權限,以維持相容性。架構會針對 Android 16 以上版本使用 SENSOR_PERMISSION_READ_HEART_RATE
權限,針對 Android 15 以下版本使用 SENSOR_PERMISSION_BODY_SENSORS
權限。
淺色
報表模式: On-change
getDefaultSensor(SENSOR_TYPE_LIGHT)
傳回非喚醒感應器
光線感應器會以 SI 勒克斯單位回報目前的照度。
評估結果會顯示在 sensors_event_t.light
。
鄰近感應器
報表模式: On-change
通常定義為喚醒感應器
getDefaultSensor(SENSOR_TYPE_PROXIMITY)
傳回喚醒感應器
鄰近感應器會回報感應器與最近可見表面之間的距離。
在 Android 4.4 之前,鄰近感應器一律是喚醒感應器,會在偵測到鄰近程度有變化時喚醒 SoC。Android 4.4 以上版本建議先導入這個感應器的喚醒版本,因為這個版本會在通話時用來開啟及關閉螢幕。
系統會以公分為單位,在 sensors_event_t.distance
中回報測量結果。請注意,部分鄰近感應器僅支援「近」或「遠」的二進位測量值。在本例中,感應器會在「遠」狀態下回報 sensor_t.maxRange
值,在「近」狀態下回報小於 sensor_t.maxRange
的值。
氣壓
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_PRESSURE)
傳回非喚醒感應器
壓力感應器 (又稱氣壓計) 會以百帕 (hPa) 為單位,回報大氣壓力。
讀數是使用
- 溫度補償
- 工廠偏壓校正
- 工廠規模校正
氣壓計通常用於估算海拔高度變化。 如要估算絕對海拔高度,必須以海平面氣壓 (會隨天氣變化) 做為參考。
相對濕度
報表模式: On-change
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)
傳回非喚醒感應器
相對濕度感應器會測量環境空氣的相對濕度,並以百分比形式傳回值。
複合感應器類型
複合感應器會處理及/或融合一或多個實體感應器的資料,藉此產生資料。(凡不是基本感應器的感應器,都稱為複合感應器)。複合式感應器範例如下:
- 步數偵測器和大幅動作,通常是以加速度計為準,但如果耗電量和準確度可接受,也可能以其他感應器為準。
- 遊戲旋轉向量,以加速計和陀螺儀為準。
- 未校準的陀螺儀:與陀螺儀基本感應器類似,但偏誤校準會分開回報,而不是在測量時修正。
與基本感應器相同,複合感應器的特徵來自最終資料的特徵。舉例來說,遊戲旋轉向量的耗電量可能等於加速度計晶片、陀螺儀晶片、處理資料的晶片,以及傳輸資料的匯流排的耗電量總和。以遊戲旋轉向量的飄移為例,這類向量的飄移程度取決於校正演算法的品質,以及實體感應器的特性。
下表列出可用的複合感應器類型。每個複合感應器都會依據一或多個實體感應器的資料運作。請勿選擇其他基礎實體感應器來估算結果,因為這樣會導致使用者體驗不佳。
感應器類型 | 類別 | 底層實體感應器 | 報表模式 |
---|---|---|---|
態度 |
加速計、陀螺儀,不得使用磁力計 |
連續 |
|
態度 |
加速計、磁力計,不得使用陀螺儀 |
連續 |
|
快速查看手勢 ![]() |
互動 |
未定義 |
單樣本 |
態度 |
加速計、陀螺儀 (如有) 或磁力計 (如無陀螺儀) |
連續 |
|
未校準 |
陀螺儀 |
連續 |
|
活動 |
加速計、陀螺儀 (如有) 或磁力計 (如無陀螺儀) |
連續 |
|
未校準 |
磁力儀 |
連續 |
|
方向 (已淘汰) |
態度 |
加速計、磁力計、陀螺儀 (如有) |
連續 |
互動 |
未定義 |
單樣本 |
|
態度 |
加速計、磁力計、陀螺儀 (如有) |
連續 |
|
活動 |
加速計 (或其他極低耗電量的感應器) |
單樣本 |
|
活動 |
加速計 |
On-change |
|
活動 |
加速計 |
特別節目 |
|
活動 |
加速計 |
特別節目 |
|
互動 |
未定義 |
單樣本 |
= 低功耗感應器
活動複合感應器
線性加速度
基礎實體感應器:加速計和陀螺儀 (如有) 或磁力計 (如無陀螺儀)
報表模式:持續
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)
傳回非喚醒感應器
線性加速度感應器會回報感應器架構中裝置的線性加速度,不包括重力。
從概念上來說,輸出內容是加速計的輸出內容減去重力感應器的輸出內容。sensors_event_t.acceleration
的 x、y 和 z 欄位會以 m/s^2 回報這項資訊。
裝置靜止不動時,所有軸的讀數應接近 0。
如果裝置有陀螺儀,線性加速度感應器就必須使用陀螺儀和加速計做為輸入。
如果裝置沒有陀螺儀,線性加速度感應器就必須使用加速計和磁力計做為輸入。
大幅移動
基礎實體感應器:加速計 (或其他低耗電感應器)
報表模式:單樣本
電量過低
僅實作這個感應器的喚醒版本。
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)
傳回喚醒感應器
如果偵測到大幅度的動作 (可能導致使用者位置變更),就會觸發大幅度動作偵測器。
這類重大動作包括:
- 步行或騎單車
- 坐在行進中的汽車、客車或火車上
不會觸發大幅動作的狀況示例:
- 手機放在口袋中,且使用者未移動
- 手機放在桌上,桌子因附近的車輛或洗衣機而稍微晃動
從高層級來看,重大動作偵測器可用於降低位置判斷的耗電量。當定位演算法偵測到裝置靜止不動時,就會切換至低耗電模式,並在使用者移動位置時,根據大幅度的動作喚醒裝置。
這個感應器必須是低功耗感應器。這項設定會降低耗電量,但可能導致少量偽陰性結果。這麼做有以下幾個原因:
- 這個感應器的目的是節省電力。
- 如果使用者沒有移動,但系統觸發事件 (誤判),會耗費大量電力,因此應避免這種情況。
- 只要不是重複發生,使用者移動時未觸發事件 (誤判為負面) 是可接受的。如果使用者已步行 10 秒,但未在這 10 秒內觸發事件,則不符合條件。
每個感應器事件都會回報 1
(以 sensors_event_t.data[0]
為單位)。
計步偵測器
基礎實體感應器:加速計 (可能還有其他低功耗感應器)
回報模式:Special (每採取一個步驟,就會觸發一個事件)
電量過低
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)
傳回非喚醒感應器
每當使用者踏出一步,步數偵測器就會產生事件。
事件的時間戳記 sensors_event_t.timestamp
對應於腳部觸地時,此時會產生劇烈的加速度變化。
相較於步數計數器,步數偵測器的延遲時間應較短 (少於兩秒)。步測器和步數計數器都會偵測使用者何時在走路、跑步和上樓梯。使用者騎單車、開車或搭乘其他交通工具時,不應觸發這類通知。
這個感應器必須是低功耗感應器。也就是說,如果無法在硬體中進行步數偵測,就不應定義這個感應器。具體來說,當步數偵測器啟動但加速計未啟動時,只有步數會觸發中斷 (而非每次加速計讀取)。
sampling_period_ns
不會影響步數偵測器。
每個感應器事件都會回報 1
(以 sensors_event_t.data[0]
為單位)。
計步器
基礎實體感應器:加速計 (可能還有其他低功耗感應器)
報表模式: On-change
低耗電
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)
傳回非喚醒感應器
步數計數器會回報使用者自上次重新啟動裝置以來,在啟用狀態下所走的步數。
這項指標會以 uint64_t
形式回報於 sensors_event_t.step_counter
,且只會在系統重新啟動時重設為零。
系統會將事件的時間戳記設為完成最後一個步驟的時間。
如要瞭解步數時間的意義,請參閱步數偵測器感應器類型。
與步數偵測器相比,步數計數器的延遲時間可能較長 (最多 10 秒)。因此,這個感應器的準確度很高。經過一整天的測量後,步數應與實際步數相差不到 10%。步測器和步數計數器都會偵測使用者何時步行、跑步和上樓梯。使用者騎單車、開車或搭乘其他交通工具時,不應觸發這類通知。
硬體必須確保內部步數計數絕不會溢位。硬體內部計數器的最小大小應為 16 位元。如果即將發生溢位 (最多每 ~2^16 個步驟),系統可以喚醒 SoC,讓驅動程式維護計數器。
如「互動」一節所述,這個感應器運作時不得干擾任何其他感應器,尤其是可能正在使用的加速度計。
如果特定裝置無法支援這些運作模式,HAL 就不得回報這類感應器。也就是說,在 HAL 中「模擬」這個感應器是不可接受的。
這個感應器必須是低功耗感應器。也就是說,如果無法在硬體中完成步數偵測,就不應定義這個感應器。具體來說,當步數計數器啟用但加速計未啟用時,只有步數會觸發中斷 (而非加速計資料)。
傾斜偵測器
基礎實體感應器:加速計 (可能還有其他低功耗感應器)
報表模式:特殊
低耗電
僅實作這個感應器的喚醒版本。
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)
傳回喚醒感應器
傾斜偵測器會在每次偵測到傾斜事件時產生事件。
傾斜事件的定義是:自感應器啟動或產生上一個事件以來,2 秒時間範圍內的平均重力方向變化至少 35 度。演算法如下:
reference_estimated_gravity
= 啟動後第一秒的加速度計測量平均值,或產生上次傾斜事件時的預估重力。current_estimated_gravity
= 過去 2 秒的加速度計測量平均值。- 觸發時機
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
如果手機方向沒有改變,大幅加速不應觸發傾斜事件。舉例來說,即使平均加速度的角度變化超過 35 度,開車時的急轉彎或強烈加速也不應觸發傾斜事件。通常,這個感應器只會透過加速度計實作。如果其他感應器不會大幅增加耗電量,也可以使用。這是低功耗感應器,可讓 SoC 進入暫停模式。請勿在 HAL 中模擬這個感應器。每個感應器事件都會回報 1
。sensors_event_t.data[0]
。
姿態複合感應器
旋轉向量
基礎實體感應器:加速計、磁力計和陀螺儀
報表模式:持續
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR)
傳回非喚醒感應器
旋轉向量感應器會回報裝置相對於東-北-上座標架構的方向。這通常是透過整合加速計、陀螺儀和磁力計讀數取得。East-North-Up 座標系統定義為直接正交基底,其中:
- X 指向東方,且與地面相切。
- Y 指向北方,且與地面相切。
- Z 軸指向天空,且與地面垂直。
手機的方向以旋轉角度表示,必須將東-北-上座標與手機座標對齊。也就是說,將旋轉套用至世界影格 (X、Y、Z) 後,即可與手機座標 (x、y、z) 對齊。
旋轉可視為將手機繞著軸 rot_axis
旋轉角度 θ,從參考 (與東-北-上對齊) 裝置螢幕方向轉到目前的裝置螢幕方向。旋轉會編碼為單位四元數的四個無單位 x、y、z、w 元件:
sensors_event_t.data[0] = rot_axis.x*sin(theta/2)
sensors_event_t.data[1] = rot_axis.y*sin(theta/2)
sensors_event_t.data[2] = rot_axis.z*sin(theta/2)
sensors_event_t.data[3] = cos(theta/2)
其中:
rot_axis
的 x、y 和 z 欄位是代表旋轉軸的單位長度向量的東-北-上座標theta
是旋轉角度
四元數是單位四元數:必須為 1
的範數。
否則用戶端行為會不穩定。
此外,這個感應器還會回報預估的航向準確度:
sensors_event_t.data[4] = estimated_accuracy
(以弧度為單位)
航向錯誤必須在 95% 的時間內小於 estimated_accuracy
。這個感應器必須使用陀螺儀做為主要的方向變更輸入內容。
這個感應器也會使用加速計和磁力計輸入內容來補償陀螺儀漂移,而且無法只使用加速計和磁力計實作。
遊戲旋轉向量
底層實體感應器:加速計和陀螺儀 (無磁力計)
報表模式:持續
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR)
傳回非喚醒感應器
遊戲旋轉向量感應器與旋轉向量感應器類似,但不使用地磁場。因此 Y 軸並非指向北方,而是指向其他參考點。陀螺儀在 Z 軸周圍的漂移量級,與允許的參考漂移量級相同。
如要瞭解如何設定 sensors_event_t.data[0-3]
,請參閱「旋轉向量」感應器。這個感應器不會回報預估的航向準確度:
sensors_event_t.data[4]
已保留,應設為 0
。
在理想情況下,手機旋轉並返回相同現實世界方向時,應會回報相同的遊戲旋轉向量。
這項感應器必須以陀螺儀和加速計為基礎。除了透過陀螺儀偏差估算間接使用磁力計外,無法將磁力計做為輸入內容。
地心引力
基礎實體感應器:加速計和陀螺儀 (如有) 或磁力計 (如無陀螺儀)
報表模式:持續
getDefaultSensor(SENSOR_TYPE_GRAVITY)
傳回非喚醒感應器
重力感應器會回報裝置座標中的重力方向和量值。
重力向量分量會以 m/s^2 為單位,回報在 sensors_event_t.acceleration
的 x、y 和 z 欄位中。
裝置靜止時,重力感應器的輸出內容應與加速計相同。在地球上,量值約為 9.8 m/s^2。
如果裝置有陀螺儀,重力感應器就必須使用陀螺儀和加速計做為輸入。
如果裝置沒有陀螺儀,重力感應器就必須使用加速計和磁力計做為輸入。
地磁旋轉向量
基礎實體感應器:加速計和磁力計 (無陀螺儀)
報表模式:持續
低耗電
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR)
傳回非喚醒感應器
地磁旋轉向量與旋轉向量感應器類似,但使用磁力計,不使用陀螺儀。
這個感應器必須以磁力計為基礎。無法使用陀螺儀實作,且這個感應器無法使用陀螺儀輸入內容。
如要瞭解如何設定 sensors_event_t.data[0-4]
,請參閱「旋轉向量」感應器。
與旋轉向量感應器相同,航向誤差必須在 95% 的時間內小於預估準確度 (sensors_event_t.data[4]
)。
這個感應器必須是低功耗,因此必須在硬體中實作。
方向 (已淘汰)
基礎實體感應器:加速計、磁力計和陀螺儀 (如有)
報表模式:持續
getDefaultSensor(SENSOR_TYPE_ORIENTATION)
傳回非喚醒感應器
注意:這是舊版感應器類型,已在 Android SDK 中淘汰。這個感應器已由旋轉向量感應器取代,後者定義更明確。請盡可能使用旋轉向量感應器,而非方向感應器。
方向感應器會回報裝置的姿態。測量結果會以度為單位,回報在 sensors_event_t.orientation
的 x、y 和 z 欄位中:
sensors_event_t.orientation.x
:方位角,即磁北方向與 Y 軸之間的角度,以 Z 軸為中心 (0<=azimuth<360
)。0 代表北方,90 代表東方,180 代表南方,270 代表西方。sensors_event_t.orientation.y
:俯仰角,繞 X 軸旋轉 (-180<=pitch<=180
),Z 軸朝 Y 軸移動時為正值。sensors_event_t.orientation.z
:側滾,繞 Y 軸旋轉 (-90<=roll<=90
),當 X 軸朝 Z 軸移動時,值為正數。
請注意,基於歷史因素,順時針方向的側滾角為正值。(以數學來說,應為逆時針方向的正值):

圖 3. 相對於裝置的方向
這與航空業使用的偏擺、俯仰和滾轉不同,航空業的 X 軸是沿著飛機的長邊 (機尾到機頭)。
方向感應器也會透過 sensors_event_t.orientation.status
回報預期讀數的準確度。如要進一步瞭解這個欄位的可能值,請參閱
SensorManager
的
SENSOR_STATUS_*
常數。
未校準的感應器
未校準的感應器會提供更多原始結果,可能包含一些偏差,但也會減少校準套用的修正「跳動」。部分應用程式可能會偏好使用這些未校正的結果,因為這類結果較為平滑且可靠。舉例來說,如果應用程式嘗試自行進行感應器融合,導入校準作業實際上可能會扭曲結果。
加速計未校正
基礎實體感應器:加速度計
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
傳回非喚醒感應器
未校準的加速計感應器會回報裝置沿著三個感應器軸的加速度,且不進行任何偏誤修正 (系統會對未校準的測量結果套用工廠偏誤和溫度補償),以及偏誤估計值。所有值都以 SI 單位 (m/s^2) 表示,並在 sensors_event_t.uncalibrated_accelerometer
的欄位中回報:
x_uncalib
:沿 X 軸的加速度 (不含偏誤補償)y_uncalib
:沿 Y 軸的加速度 (不含偏誤補償)z_uncalib
:Z 軸的加速度 (不含偏差補償)x_bias
:沿 X 軸的預估偏誤y_bias
:沿 Y 軸的估計偏差z_bias
:沿 Z 軸的預估偏誤
陀螺儀未校準
基礎實體感應器:陀螺儀
報表模式:持續
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED)
傳回非喚醒感應器
未校準的陀螺儀會回報感應器軸的旋轉速率,且不會對這些軸套用偏差補償,並提供偏差估計值。所有值都以弧度/秒為單位,並會回報在 sensors_event_t.uncalibrated_gyro
的欄位中:
x_uncalib
:繞 X 軸的角速度 (不含飄移補償)y_uncalib
:角速度 (不含飄移補償),以 Y 軸為準z_uncalib
:Z 軸周圍的角速度 (不含飄移補償)x_bias
:X 軸周圍的估計漂移y_bias
:Y 軸周圍的預估漂移z_bias
:Z 軸周圍的預估漂移
從概念上來說,未校正的測量值是校正測量值和偏差估計值的總和:_uncalibrated = _calibrated + _bias
。
預期 x_bias
、y_bias
和 z_bias
值會在偏誤估計值變更時立即跳動,其餘時間則應保持穩定。
如要瞭解所用的座標系統,請參閱陀螺儀感應器的定義。
測量結果必須經過原廠校正和溫度補償。此外,您也必須實作陀螺儀漂移估算,才能在 x_bias
、y_bias
和 z_bias
中回報合理的估算值。如果實作內容無法估算漂移,則不得實作這個感應器。
如果存在這項感應器,則對應的陀螺儀感應器也必須存在,且這兩項感應器必須共用相同的 sensor_t.name
和 sensor_t.vendor
值。
磁場未校準
基礎實體感應器:磁力儀
報表模式:持續
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED)
傳回非喚醒感應器
未校準的磁場感應器會回報周遭磁場,以及硬鐵校準估計值。所有值都以微特斯拉 (uT) 為單位,並在 sensors_event_t.uncalibrated_magnetic
的欄位中回報:
x_uncalib
:沿著 X 軸的磁場 (不含硬鐵補償)y_uncalib
:沿 Y 軸的磁場 (不含硬鐵補償)z_uncalib
:Z 軸的磁場 (未經硬鐵補償)x_bias
:沿 X 軸估算的硬鐵偏誤y_bias
:沿 Y 軸估算的硬鐵偏差z_bias
:沿 Z 軸的硬鐵偏壓估計值
從概念上來說,未校正的測量值是校正測量值和偏差估計值的總和:_uncalibrated = _calibrated + _bias
。
未校準的磁力計可讓較高層級的演算法處理錯誤的硬鐵估算值。硬體鐵芯估計值變更後,x_bias
、y_bias
和 z_bias
值應會立即跳動,之後則會維持穩定。
測量結果必須經過軟鐵校正和溫度補償。此外,必須實作硬鐵估算,才能在 x_bias
、y_bias
和 z_bias
中回報合理的估算值。如果實作項目無法估算偏差,則不得實作這個感應器。
如果存在這個感應器,則必須存在對應的磁場感應器,且這兩個感應器必須共用相同的 sensor_t.name
和 sensor_t.vendor
值。
轉軸角度
報表模式: On-change
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE)
傳回喚醒感應器
轉軸角度感應器會測量裝置兩個整體部分之間的角度 (以度為單位)。這類感應器測得的鉸鏈移動情形,預期會改變使用者與裝置的互動方式,例如展開或顯示螢幕。
互動複合感應器
部分感應器主要用於偵測與使用者的互動。我們不會定義感應器必須如何實作,但感應器必須低功耗,且裝置製造商有責任驗證感應器在使用者體驗方面的品質。
喚醒手勢
底層實體感應器:未定義 (任何低功耗感應器)
報表模式:單樣本
低耗電
僅實作這個感應器的喚醒版本。
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
傳回喚醒感應器
喚醒手勢感應器可根據裝置的特定動作喚醒裝置。感應器觸發時,裝置會模擬按下電源鍵的動作,開啟螢幕。使用者可能會在裝置設定中停用這項行為 (感應器觸發時開啟螢幕)。設定變更不會影響感應器的行為,只會影響架構在觸發時是否開啟螢幕。系統不會指定要偵測的實際手勢,裝置製造商可以自行選擇。
這個感應器必須是低功耗,因為可能會全天候啟動。
每個感應器事件都會回報 1
(以 sensors_event_t.data[0]
為單位)。
拾取手勢
底層實體感應器:未定義 (任何低功耗感應器)
報表模式:單樣本
低耗電
僅實作這個感應器的喚醒版本。
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)
傳回喚醒感應器
無論裝置先前放在哪裡 (桌上、口袋、包包),只要拿起裝置,感應器就會觸發。
每個感應器事件都會回報 1
(以 sensors_event_t.data[0]
為單位)。
Glance 手勢
底層實體感應器:未定義 (任何低功耗感應器)
報表模式:單樣本
低耗電
僅實作這個感應器的喚醒版本。
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)
傳回喚醒感應器
透過「快速瀏覽」手勢感應器,使用者可以根據特定動作短暫開啟螢幕,快速瀏覽螢幕上的內容。感應器觸發時,裝置會暫時開啟螢幕,讓使用者在裝置處於非互動狀態 (休眠) 時,快速查看通知或其他內容,然後螢幕會再次關閉。使用者可以在裝置設定中停用這項行為 (感應器觸發時短暫開啟螢幕)。設定變更不會影響感應器的行為,只會影響架構在觸發時是否短暫開啟螢幕。系統不會指定要偵測的實際手勢,裝置製造商可自行選擇。
這個感應器必須是低功耗,因為可能會全天候啟動。
每個感應器事件都會回報 1
。sensors_event_t.data[0]
。
軸數有限的 IMU 感應器
Android 13 以上版本提供軸數受限的 IMU 感應器,支援無法使用所有三個軸 (x、y、z) 的用途。Android 中的標準 IMU 類型 (例如
SENSOR_TYPE_ACCELEROMETER
和
SENSOR_TYPE_GYROSCOPE
)
會假設支援所有三個軸。不過,並非所有板型規格和裝置都支援 3 軸加速度計和 3 軸陀螺儀。
加速度計軸數有限
基礎實體感應器:加速度計
報表模式:持續
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES)
傳回非喚醒感應器
加速計受限軸感應器等同於 TYPE_ACCELEROMETER
,但支援一或兩個軸不受支援的情況。
感應器回報的最後三個感應器事件值,代表是否支援 x、y 和 z 軸的加速度值。值為 1.0
表示支援該軸,值為 0
則表示不支援。裝置製造商會在建構時識別支援的軸,且值在執行階段不會變更。
裝置製造商必須將未使用的軸向加速度值設為 0
,而非未定義的值。
陀螺儀軸數有限
底層實體感應器:陀螺儀
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES)
傳回非喚醒感應器
陀螺儀受限軸感應器等同於 TYPE_GYROSCOPE
,但支援一或兩個軸不受支援的情況。
感應器回報的最後三個感應器事件值,代表是否支援 x、y 和 z 軸的角速度值。值為 1.0
表示支援該軸,值為 0
則表示不支援。裝置製造商會在建構時識別支援的軸,且值在執行階段不會變更。
裝置製造商必須將未使用軸的角速度值設為 0
。
加速度計軸數受限,未校準
基礎實體感應器:加速度計
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED)
傳回非喚醒感應器
加速計受限軸未校準感應器等同於 TYPE_ACCELEROMETER_UNCALIBRATED
,但支援一或兩個軸不受支援的情況。
感應器回報的最後三個感應器事件值,代表是否支援 x、y 和 z 軸的加速度和偏誤值。1.0
值表示支援該軸,0
值則表示不支援。裝置製造商會在建構時識別支援的軸,且值在執行階段不會變更。
裝置製造商必須將未使用的軸向加速度和偏誤值設為 0
。
陀螺儀軸數有限,未校準
底層實體感應器:陀螺儀
報表模式: 持續
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED)
傳回非喚醒感應器
陀螺儀受限軸未校準感應器等同於 TYPE_GYROSCOPE_UNCALIBRATED
,但支援一或兩個軸不受支援的情況。
感應器回報的最後三個感應器事件值,代表是否支援 x、y 和 z 軸的角速度和漂移值。1.0
值表示支援該軸,0
值則表示不支援。裝置製造商會在建構時識別支援的軸,且值在執行階段不會變更。
裝置製造商必須將未使用的軸向角速度和漂移值設為 0
。
複合有限軸 IMU
底層實體感應器:3 軸加速計、3 軸陀螺儀、3 軸未校準加速計和 3 軸未校準陀螺儀感應器的任意組合。
報表模式: 持續
複合式有限軸 IMU 感應器等同於有限軸 IMU 感應器,但不是在 HAL 支援,而是將 3 軸感應器資料轉換為對等的有限軸變體。這些複合感應器僅適用於車用裝置。
下表顯示從標準 3 軸加速度計轉換為複合有限軸加速度計的範例。
SENSOR_TYPE_ACCELEROMETER 的 SensorEvent 值 | SENSOR_TYPE_ACCELEROMETER SensorEvent 範例 | 複合 SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
---|---|---|
values[0] | -0.065 |
-0.065 |
values[1] | 0.078 |
0.078 |
values[2] | 9.808 |
9.808 |
values[3] | 無 |
1.0 |
values[4] | 無 |
1.0 |
values[5] | 無 |
1.0 |
車用感應器
支援汽車用途的感應器。
標題
基礎實體感應器:GPS、磁力計、加速計和陀螺儀的任意組合。
報表模式:持續
getDefaultSensor(SENSOR_TYPE_HEADING)
傳回非喚醒感應器
從 Android 13 開始,頂角感應器會測量裝置相對於正北方的方向,以度為單位。航向感應器包含兩個 SensorEvent
值。
一個用於測量裝置航向,另一個用於提供航向值的準確度。
這個感應器回報的方位值必須介於 0.0
(含) 和 360.0
(不含) 之間,其中 0
表示北方、90
表示東方、180
表示南方,而 270
表示西方。
這項感應器的準確度是在 68% 的信賴水準下定義。如果基礎分布為高斯常態分布,準確度就是一個標準差。舉例來說,如果航向感應器傳回的航向值為 60 度,準確度值為 10 度,則真實航向介於 50 度和 70 度之間的機率為 68%。