![Android Sensors HAL 圖示](https://source.android.google.cn/static/docs/core/interaction/sensors/images/ape_fwk_hal_sensors.png?authuser=2&hl=zh-tw)
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 Sensor 類型已在 sensors.h 中定義,名稱為 SENSOR_TYPE_…
- 絕大多數感應器都有官方感應器類型。
- 這些類型已在 Android SDK 中記錄。
- 在 Android Compatibility Test Suite (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 (相容性定義文件)
- /compatibility/android-cdd.pdf
- 請參閱與感應器相關的章節。
- CDD 的規定較為寬鬆,因此滿足 CDD 規定並不足以確保感應器的品質。