傳感器

Android 傳感器 HAL 圖標

Android 傳感器使應用程序可以訪問移動設備的底層物理傳感器。它們是由sensors.h (傳感器硬件抽象層(HAL))定義的提供數據的虛擬設備。

什麼是安卓傳感器?

Android 傳感器是虛擬設備,提供來自一組物理傳感器的數據:加速度計、陀螺儀、磁力計、氣壓計、濕度、壓力、光、接近和心率傳感器。

提供數據的物理設備列表中不包括相機、指紋傳感器、麥克風和触摸屏。這些設備有自己的報告機制;分離是任意的,但一般來說,Android 傳感器提供較低帶寬的數據。例如,加速度計的“100hz x 3 通道”與相機的“25hz x 8 MP x 3 通道”或麥克風的“44kHz x 1 通道”。

Android 沒有定義不同的物理傳感器如何連接到片上系統 (SoC)。

  • 通常,傳感器芯片通過傳感器集線器連接到 SoC,從而允許對數據進行一些低功耗監控和處理。
  • 通常,內部集成電路 (I2C) 或串行外設接口 (SPI) 用作傳輸機制。
  • 為了降低功耗,一些架構是分層的,一些最小的處理在專用集成電路中完成(ASIC - 類似加速度計芯片上的運動檢測),更多的是在微控制器中完成(如傳感器集線器中的步數檢測) )。
  • 設備製造商可以根據精度、功率、價格和封裝尺寸特性來選擇架構。有關詳細信息,請參閱傳感器堆棧
  • 批處理能力是功率優化的重要考慮因素。有關詳細信息,請參閱批處理

每個 Android 傳感器都有一個“類型”,表示傳感器的行為方式以及它提供的數據。

  • 官方的 Android傳感器類型sensor.h中定義,名稱為 SENSOR_TYPE_...
    • 絕大多數傳感器都有官方傳感器類型。
    • 這些類型記錄在 Android SDK 中。
    • 具有這些類型的傳感器的行為在 Android 兼容性測試套件 (CTS) 中進行了測試。
  • 如果製造商在 Android 設備上集成了一種新型傳感器,則製造商可以定義自己的臨時類型來引用它。
    • 這些類型是未記錄的,因此應用程序開發人員不太可能使用它們,或者因為他們不了解它們,或者知道它們很少存在(僅在該特定製造商的某些設備上)。
    • 它們未經 CTS 測試。
    • 一旦 Android 為這種傳感器定義了官方的傳感器類型,製造商必須停止使用自己的臨時類型,而改用官方類型。這樣,傳感器將被更多的應用程序開發人員使用。
  • 設備上存在的所有傳感器的列表由 HAL 實現報告。
    • 可以有多個相同類型的傳感器。例如,兩個接近傳感器或兩個加速度計。
    • 絕大多數應用程序只需要一個給定類型的傳感器。例如,請求默認加速度計的應用程序將獲得列表中的第一個加速度計。
    • 傳感器通常由喚醒非喚醒對定義,兩個傳感器共享相同的類型,但它們的喚醒特性不同。

Android 傳感器以一系列傳感器事件的形式提供數據。

每個事件包含:

報告數據的解釋取決於傳感器類型。有關每種傳感器類型報告的數據的詳細信息,請參閱傳感器類型定義。

現有文件

針對開發者

針對製造商