📌 场景介绍

加速度传感器可用于实现:

  • 摇一摇 功能

  • 计步器、运动识别

  • 小车/滑块控制、陀螺仪视角等

本篇将实现:

  • 启动加速度传感器监听

  • 实时获取 X/Y/Z 方向的加速度值

  • 展示在页面上动态刷新


🧱 页面结构

/entry/src/main/ets
  └── pages/
       └── AccelerometerDemo.ets     // 传感器实时监听页

🧱 权限配置(config.json)

"reqPermissions": [
  { "name": "ohos.permission.ACCELEROMETER" }
]

🧩 AccelerometerDemo.ets 示例页面

import sensor from '@ohos.sensor'

@Entry
@Component
struct AccelerometerDemo {
  @State accelX: string = '0.0'
  @State accelY: string = '0.0'
  @State accelZ: string = '0.0'
  @State isListening: boolean = false

  private startSensor() {
    if (this.isListening) return
    this.isListening = true

    sensor.on(sensor.SensorId.SENSOR_ID_ACCELEROMETER, (data) => {
      this.accelX = data.x.toFixed(2)
      this.accelY = data.y.toFixed(2)
      this.accelZ = data.z.toFixed(2)
    })
  }

  private stopSensor() {
    if (!this.isListening) return
    sensor.off(sensor.SensorId.SENSOR_ID_ACCELEROMETER)
    this.isListening = false
  }

  build() {
    Column() {
      Text("📡 加速度传感器演示").fontSize(22).margin(20)

      Row() {
        Button(this.isListening ? "停止监听" : "开始监听")
          .onClick(() => this.isListening ? this.stopSensor() : this.startSensor())
          .margin(10)
      }

      Text(`X 轴:${this.accelX}`).fontSize(16).margin(5)
      Text(`Y 轴:${this.accelY}`).fontSize(16).margin(5)
      Text(`Z 轴:${this.accelZ}`).fontSize(16).margin(5)
    }
    .padding(30)
    .height('100%')
    .alignItems(HorizontalAlign.Start)
  }
}

✅ 效果说明

  • 点击“开始监听”后开始监听传感器数据

  • 页面每隔几十毫秒实时更新 XYZ 加速度值

  • 设备晃动时数值剧烈变化


🔧 拓展建议

  • 判断三轴数据变化实现“摇一摇”事件

  • 结合时间轴绘制运动趋势图(折线图)

  • 支持陀螺仪(GYROSCOPE)或重力(GRAVITY)等其他传感器监听

更多推荐