使用传感器 API 获取气压时,传入的回调间隔是 1s(1000 * 1000 * 1000),但实际回调间隔远小于 1s,大概是 0.1s
完整代码如下:
import { sensor } from '@kit.SensorServiceKit';
import Logger, { TAG_OT } from '../../manager/Logger';
import { SECOND_IN_NANOS, SECOND_IN_MILLIS } from '../../utils/DateUtils';
/**
* 通过传感器获取气压
*/
class PressureSensorManager {
lastPressure = 0
lastPressureTimestamp = 0
/**
* 开启气压监听
*/
startSensor(): Promise<void> {
Logger.i(TAG_OT, `PressureManager: start sensor`)
return new Promise((resolve, reject) => {
try {
sensor.on(
sensor.SensorId.BAROMETER,
(response: sensor.BarometerResponse) => {
this.onPressorChange(response)
},
{ interval: TIME_INTERVAL }
)
resolve()
} catch (error) {
reject()
Logger.e(TAG_OT, `start pressure sensor error: ${JSON.stringify(error)}`)
}
})
}
/**
* 关闭气压监听
*/
stopSensor() {
sensor.off(sensor.SensorId.BAROMETER)
Logger.i(TAG_OT, `stop pressure sensor`)
}
private onPressorChange(response: sensor.BarometerResponse) {
this.lastPressure = response.pressure
this.lastPressureTimestamp = Date.now()
Logger.d(TAG_OT, `on pressure change. pressure: ${response.pressure}`)
}
}
// 传感器回调间隔,纳秒
const TIME_INTERVAL = 1000 * 1000 * 1000
export default new PressureSensorManager()
每个传感器的回调间隔是有范围的,首先用某个传感器要用hidumper -s 3601 -a -l命令查询一下对应传感器的回调间隔范围,如果小于最小值,会默认给个最小值;如果大于最大值,会默认给个最大值