感應器類型

本節說明感應器軸、基礎感應器和複合感應器 (活動、姿態、未校準和互動)。

感應器軸

許多感應器的感應器事件值會以特定框架表示,該框架相對於裝置是靜態的。

行動裝置軸

感應器 API 只會參考螢幕的自然方向 (裝置螢幕方向改變時,軸不會交換)。

行動裝置感應器 API 的座標系統

圖 1. Sensor API 使用的座標系統 (相對於行動裝置)

汽車類 - 軸

在 Android Automotive 實作中,軸是根據車身框架定義。車輛參考架構的原點是後軸中心。車輛參考架構的方向如下:

  • X 軸指向右側,位於水平面上,垂直於車輛的對稱平面。
  • Y 軸指向前方,位於水平平面上。
車輛裝置感應器 API 的座標系統

圖 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.bpmheart_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 中模擬這個感應器。每個感應器事件都會回報 1sensors_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_biasy_biasz_bias 值會在偏誤估計值變更時立即跳動,其餘時間則應保持穩定。

如要瞭解所用的座標系統,請參閱陀螺儀感應器的定義。

測量結果必須經過原廠校正和溫度補償。此外,您也必須實作陀螺儀漂移估算,才能在 x_biasy_biasz_bias 中回報合理的估算值。如果實作內容無法估算漂移,則不得實作這個感應器。

如果存在這項感應器,則對應的陀螺儀感應器也必須存在,且這兩項感應器必須共用相同的 sensor_t.namesensor_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_biasy_biasz_bias 值應會立即跳動,之後則會維持穩定。

測量結果必須經過軟鐵校正和溫度補償。此外,必須實作硬鐵估算,才能在 x_biasy_biasz_bias 中回報合理的估算值。如果實作項目無法估算偏差,則不得實作這個感應器。

如果存在這個感應器,則必須存在對應的磁場感應器,且這兩個感應器必須共用相同的 sensor_t.namesensor_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) 傳回喚醒感應器

透過「快速瀏覽」手勢感應器,使用者可以根據特定動作短暫開啟螢幕,快速瀏覽螢幕上的內容。感應器觸發時,裝置會暫時開啟螢幕,讓使用者在裝置處於非互動狀態 (休眠) 時,快速查看通知或其他內容,然後螢幕會再次關閉。使用者可以在裝置設定中停用這項行為 (感應器觸發時短暫開啟螢幕)。設定變更不會影響感應器的行為,只會影響架構在觸發時是否短暫開啟螢幕。系統不會指定要偵測的實際手勢,裝置製造商可自行選擇。

這個感應器必須是低功耗,因為可能會全天候啟動。 每個感應器事件都會回報 1sensors_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%。