Generic Sensor API 提供了一組屬性和方法,將傳感器暴露給 Web 端應用。在這個標準中,規定了基本的接口和類,使得在實現各類傳感器 API 時可以經過繼承快速實現。在介紹完本標準後,我會舉例使用其中一個傳感器 API。javascript
與 DeviceMotion 和 DeviceOrientation 這些已有的可以提供傳感器數據的 API 相比之下,Generic Sensor API 體現出了許多好處:java
類名 | 傳感器 |
---|---|
Accelerometer | 加速度計 |
Gyroscope | 陀螺儀 |
LinearAccelerationSensor | 線性加速傳感器 |
AbsoluteOrientationSensor | 絕對方向傳感器 |
RelativeOrientationSensor | 相對方向傳感器 |
AmbientLightSensor | 環境光傳感器 |
Magnetometer | 磁力計 |
接下來咱們來詳細瞭解 Generic Sensor API 中的屬性和方法web
首先構建傳感器對象,進入空閒狀態,調用 start
方法以後進行激活(激活中狀態),若是發生錯誤,則回到空閒狀態,成功則進入已激活狀態。調用 stop
或出錯,則返回空閒狀態。瀏覽器
activated
, reading
, error
事件時不會被回收reading
, error
事件時不會被回收SensorOptions
是用於在構建傳感器對象時傳入的配置項,在 Generic Sensor API 的基類中支持一種設置安全
設置 | 做用 |
---|---|
frequency | 採樣率,單位 Hz |
該屬性用於檢測當前傳感器是否屬於已激活的狀態,是則返回 true
ui
該屬性首先會檢查最近一次讀數的時間戳,若是有則返回 true
google
該屬性用於讀取最近一次讀數的時間戳的值spa
start
方法會開始對傳感器數據進行採樣,採樣率能夠在構建傳感器對象時經過參數傳入。code
若是平臺與傳感器之間沒法創建鏈接,將會拋出 NotReadableError
異常;cdn
若是平臺沒有訪問傳感器的權限,將會拋出NotAllowedError
異常
stop
方法將會中止對傳感器的數據採樣,並將傳感器置爲空閒狀態
當調用 start
方法以後,根據設定的採樣率,將會按照採樣率採樣數據並經過該事件通知產生了讀數
在傳感器的生命週期中,若是狀態從 activating
變動到 activated
時將會觸發此事件
當操做傳感器時或傳感器出現異常時將會經過此事件拋出
如今,咱們將使用 AmbientLightSensor
爲例,製做一個簡單的頁面,根據返回的數值(光照度 lux)改變背景,小於 100 lux 時變爲黑色背景。
首先經過簡單的檢查,查看當前平臺是否支持此傳感器
if (window.AmbientLightSensor) {
...
} else {
...
}
複製代碼
const als = new AmbientLightSensor();
als.addEventListener('reading', () => {
...
})
複製代碼
als.start();
複製代碼
經過在 reading
事件中判斷光照度,動態改變界面樣式
若是沒有成功讀取數值,先嚐試在 flags 中將 Generic Sensor Extra Classes 開啓:
在 Chrome 中,一部分傳感器實現已是默認開啓了,例如 Gyroscope
, Magnetometer
等。經過傳感器數據,在 Web 端將能實現更多更好的交互。