
Android 感應器可讓應用程式存取行動裝置的底層實體感應器。這些是 sensors.h 定義的虛擬裝置,可提供感應器資料,也就是感應器硬體抽象層 (HAL)。
什麼是 Android 感應器?
Android 感應器是虛擬裝置,可提供來自一組實體感應器的資料,包括加速計、陀螺儀、磁力計、氣壓計、濕度、壓力、光線、近接感應器和心率感應器。
提供資料的實體裝置清單不包括攝影機、指紋感應器、麥克風和觸控螢幕。這些裝置有自己的回報機制;雖然這種區分方式是任意的,但一般來說,Android 感應器提供的資料頻寬較低。舉例來說,加速度計為「100 Hz x 3 個通道」,攝影機為「25 Hz x 8 MP x 3 個通道」,麥克風則為「44 kHz x 1 個通道」。
Android 並未定義不同實體感應器如何連線至晶片系統 (SoC)。
- 感應器晶片通常會透過感應器中樞連接至 SoC,以便進行部分低功耗監控和資料處理作業。
- 通常會使用積體電路間 (I2C) 或序列周邊介面 (SPI) 做為傳輸機制。
- 為了減少耗電量,部分架構採用階層式設計,在特定應用程式的積體電路 (ASIC,例如加速計晶片上的動作偵測) 中完成最少的處理作業,並在微控制器 (例如感應器中樞的步數偵測) 中完成更多作業。
- 裝置製造商會根據準確度、電力、價格和封裝大小特性選擇架構。詳情請參閱「感應器堆疊」。
- 批次處理功能是電力最佳化的重要考量因素。詳情請參閱「批次處理」。
每個 Android 感應器都有「類型」,代表感應器的運作方式和提供的資料。
- Android 官方感應器類型定義於 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/+/android16-release/include/hardware/sensors.h
- 也稱為「sensors.h」
- 可靠資料來源。開發新功能時,會先更新這份文件。
- Android CDD (相容性定義文件)
- /compatibility/android-cdd.pdf
- 請參閱感應器相關章節。
- CDD 較為寬鬆,因此滿足 CDD 規定不足以確保感應器品質優良。