HarmonyOS 传感器回调时间间隔问题?

使用传感器 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()
阅读 560
1 个回答

每个传感器的回调间隔是有范围的,首先用某个传感器要用hidumper -s 3601 -a -l命令查询一下对应传感器的回调间隔范围,如果小于最小值,会默认给个最小值;如果大于最大值,会默认给个最大值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进