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 傳感器以一系列傳感器事件的形式提供數據。
每個事件包含:
- 生成它的傳感器的句柄
- 基於
SystemClock.elapsedRealtimeNanos()
檢測或測量事件的時間戳 - 和一些數據
報告數據的解釋取決於傳感器類型。有關每種傳感器類型報告的數據的詳細信息,請參閱傳感器類型定義。
現有文件
針對開發者
- 概述
- SDK 參考
- Stack Overflow 和教程網站
- 由於有時缺少傳感器文檔,開發人員求助於 Stack Overflow 等問答網站來尋找答案。
- 一些教程網站也存在,但不涵蓋批處理、重要運動和遊戲旋轉向量等最新功能。
- 那裡的答案並不總是正確的,並表明需要更多文檔。
針對製造商
- 概述
- 此傳感器頁面及其子頁面。
- 硬件抽象層 (HAL)
- /platform/hardware/libhardware/+/master/include/hardware/sensors.h
- 也稱為“sensors.h”
- 真理之源。開發新功能時要更新的第一個文檔。
- Android CDD(兼容性定義文檔)
- https://source.android.com/compatibility/android-cdd.pdf
- 請參閱與傳感器相關的部分。
- CDD 是寬鬆的,因此滿足 CDD 要求並不足以確保高質量的傳感器。