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 端将能实现更多更好的交互。