稳定性:稳定
sensors 模块提供了获取手机上的传感器的信息的支持,这些传感器包括距离传感器、光线光感器、重力传感器、方向传感器等。需要指出的是,脚本只能获取传感器的数据,不能模拟或伪造传感器的数据和事件,因此诸如模拟摇一摇的功能是无法实现的。
要监听一个传感器时,需要使用sensors.register()
注册监听器,之后才能开始监听;不需要监听时则调用sensors.unregister()
注销监听器。在脚本结束时会自动注销所有的监听器。同时,这种监听会使脚本保持运行状态,如果不注销监听器,脚本会一直保持运行状态。
例如,监听光线传感器的代码为:
要注意的是,每个传感器的数据并不相同,所以对他们调用on()
监听事件时的回调函数参数也不是相同,例如光线传感器参数为(event, light)
,加速度传感器参数为(event, ax, ay, az)
。甚至在某些设备上的传感器参数有所增加,例如华为手机的距离传感器为三个参数,一般手机只有一个参数。
常用的传感器及其事件参数如下表:
accelerometer
加速度传感器,参数(event, ax, ay, az)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息ax
{number} x 轴上的加速度,单位 m/s^2ay
{number} y 轴上的加速度,单位 m/s^2az
{number} z 轴上的加速度,单位 m/s^2
这里的 x 轴,y 轴,z 轴所属的坐标系统如下图 (其中 z 轴垂直于设备屏幕表面):!
orientation
方向传感器,参数(event, azimuth, pitch, roll)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息azimuth
{number} 方位角,从地磁指北方向线起,依顺时针方向到 y 轴之间的水平夹角,单位角度,范围 0~359pitch
{number} 绕 x 轴旋转的角度,当设备水平放置时该值为 0,当设备顶部翘起时该值为正数,当设备尾部翘起时该值为负数,单位角度,范围 -180~180roll
{number} 绕 y 轴顺时针旋转的角度,单位角度,范围 -90~90gyroscope
陀螺仪传感器,参数(event, wx, wy, wz)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息wx
{number} 绕 x 轴的角速度,单位弧度/swy
{number} 绕 y 轴的角速度,单位弧度/swz
{number} 绕 z 轴的角速度,单位弧度/smagnetic_field
磁场传感器,参数(event, bx, by, bz)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息bx
{number} x 轴上的磁场强度,单位 uTby
{number} y 轴上的磁场强度,单位 uTbz
{number} z 轴上的磁场强度,单位 uTgravity
重力传感器,参数(event, gx, gy, gz)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息gx
{number} x 轴上的重力加速度,单位 m/s^2gy
{number} y 轴上的重力加速度,单位 m/s^2gz
{number} z 轴上的重力加速度,单位 m/s^2linear_acceleration
线性加速度传感器,参数(event, ax, ay, az)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息ax
{number} x 轴上的线性加速度,单位 m/s^2ay
{number} y 轴上的线性加速度,单位 m/s^2az
{number} z 轴上的线性加速度,单位 m/s^2ambient_temperature
环境温度传感器,大部分设备并不支持,参数(event, t)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息t
{number} 环境温度,单位摄氏度。light
光线传感器,参数(event, light)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息light
{number} 环境光强度,单位 luxpressure
压力传感器,参数(event, p)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息p
{number} 大气压,单位 hPaproximity
距离传感器,参数(event, distance)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息distance
{number} 一般指设备前置摄像头旁边的距离传感器到前方障碍物的距离,并且很多设备上这个值只有两种情况:当障碍物较近时该值为 0,当障碍物较远或在范围内没有障碍物时该值为 5relative_humidity
湿度传感器,大部分设备并不支持,参数(event, rh)
:
event
SensorEvent 传感器事件,用于获取传感器数据变化时的所有信息rh
{number} 相对湿度,范围为 0~100(百分比)sensorName
{string} 传感器名称,常用的传感器名称如上面所述delay
{number} 传感器数据更新频率,可选,默认为sensors.delay.normal
。可用的值如下:
sensors.delay.normal
正常频率sensors.delay.ui
适合于用户界面的更新频率sensors.delay.game
适合于游戏的更新频率sensors.delay.fastest
最快的更新频率】注册一个传感器监听并返回SensorEventEmitter。
例如:
可以通过 delay 参数来指定传感器数据的更新频率,例如:
另外,如果不支持sensorName
所指定的传感器,那么该函数将返回null
;但如果sensors.ignoresUnsupportedSensor
的值被设置为true
, 则该函数会返回一个不会分发任何传感器事件的SensorEventEmitter。
例如:
更多信息,参见SensorEventEmitter和sensors.ignoresUnsupportedSensor。
emiiter
SensorEventEmitter注销该传感器监听器。被注销的监听器将不再能监听传感器数据。
注销所有传感器监听器。
表示是否忽略不支持的传感器。如果该值被设置为true
,则函数sensors.register()
即使对不支持的传感器也会返回一个无任何数据的虚拟传感器监听,也就是sensors.register()
不会返回null
从而避免非空判断,并且此时会触发sensors
的"unsupported_sensor"事件。
sensorName
{string} 不支持的传感器名称当sensors.ignoresUnsupportedSensor
被设置为true
并且有不支持的传感器被注册时触发该事件。事件参数的传感器名称。
注册传感器返回的对象,其本身是一个 EventEmmiter,用于监听传感器事件。
..args
{Any} 传感器参数当传感器数据改变时触发该事件;该事件触发的最高频繁由sensors.register()
指定的 delay 参数决定。
事件参数根据传感器类型不同而不同,具体参见本章最前面的列表。
一个监听光线传感器和加速度传感器并且每 0.5 秒获取一个数据并最终写入一个 csv 表格文件的例子如下:
accuracy
{number} 表示传感器精度。为以下值之一:
当传感器精度改变时会触发的事件。比较少用。