Android 感測器使應用程式能夠存取行動裝置的底層實體感測器。它們是由sensors.h(感測器硬體抽象層(HAL))定義的提供資料的虛擬設備。
什麼是 Android 感應器?
Android 感測器是虛擬設備,提供來自一組實體感測器的數據:加速計、陀螺儀、磁力計、氣壓計、濕度、壓力、光線、接近度和心率感測器。
提供資料的實體設備清單中不包括攝影機、指紋感應器、麥克風和觸控螢幕。這些設備有自己的通報機制;分離是任意的,但一般來說,Android 感測器提供較低頻寬的資料。例如,加速度計為“100hz x 3 通道”,相機為“25hz x 8 MP x 3 通道”,麥克風為“44kHz x 1 通道”。
Android 沒有定義不同的實體感測器如何連接到系統單晶片 (SoC)。
- 通常,感測器晶片透過感測器集線器連接到 SoC,從而允許對資料進行一些低功耗監控和處理。
- 通常,內部積體電路 (I2C) 或串列週邊介面 (SPI) 被用作傳輸機制。
- 為了降低功耗,一些架構是分層的,一些最小的處理是在專用集成電路(ASIC——如加速度計晶片上的運動檢測)中完成的,而更多的處理是在微控制器中完成的(如感測器集線器中的步數檢測) )。
- 設備製造商應根據精度、功耗、價格和封裝尺寸特徵來選擇架構。有關詳細信息,請參閱感測器堆疊。
- 批次能力是功耗優化的一個重要考慮因素。有關詳細信息,請參閱批次處理。
每個 Android 感測器都有一個“類型”,表示感測器的行為方式及其提供的數據。
- 官方 Android感測器類型在Sensors.h中定義,名稱為 SENSOR_TYPE_...
- 絕大多數感測器都有官方感測器類型。
- 這些類型記錄在 Android SDK 中。
- 這些類型的感測器的行為在 Android 相容性測試套件 (CTS) 中進行測試。
- 如果製造商在 Android 裝置上整合了一種新型感測器,則製造商可以定義自己的臨時類型來引用它。
- 這些類型沒有記錄,因此應用程式開發人員不太可能使用它們,要么因為他們不了解它們,要么知道它們很少出現(僅在該特定製造商的某些設備上)。
- 它們未經 CTS 測試。
- 一旦Android為此類感測器定義了官方感測器類型,製造商就必須停止使用自己的臨時類型,轉而使用官方類型。這樣,感測器將被更多的應用開發者使用。
- 設備上存在的所有感測器的清單由 HAL 實現報告。
Android 感測器以一系列感測器事件的形式提供數據。
每個事件包含:
- 產生它的感測器的句柄
- 偵測或測量事件的時間戳,基於
SystemClock.elapsedRealtimeNanos()
- 和一些數據
報告數據的解釋取決於感測器類型。有關每種感測器類型報告的數據的詳細信息,請參閱感測器類型定義。
現有文檔
針對開發商
- 概述
- SDK參考
- Stack Overflow 和教學網站
- 由於有時缺乏感測器文檔,開發人員求助於 Stack Overflow 等問答網站來尋找答案。
- 也存在一些教學網站,但不涵蓋批次、重要運動和遊戲旋轉向量等最新功能。
- 那裡的答案並不總是正確的,並且表明哪裡需要更多文件。
針對製造商
- 概述
- 此感測器頁面及其子頁面。
- 硬體抽象層(HAL)
- /platform/hardware/libhardware/+/main/include/hardware/sensors.h
- 也稱為“sensors.h”
- 真理之源。開發新功能時要更新的第一個文件。
- Android CDD(相容性定義文件)
- /相容性/android-cdd.pdf
- 請參閱與感測器相關的部分。
- CDD 很寬鬆,因此滿足 CDD 要求並不足以確保高品質的感測器。