鸿蒙 next 实现摇一摇功能

获取加速度权限

// entry\src\main\module.json5
"requestPermissions": [
  {
    "name": "ohos.permission.INTERNET"
  },
  {
    "name": "ohos.permission.ACCELEROMETER"
  }
]

实现逻辑代码

import sensor from "@ohos.sensor";

class ShakeSensor {
  private x1: number = 0;
  private y1: number = 0;
  private z1: number = 0;
  // 摇动次数
  private count: number = 0;
  private fn: Function | undefined;

  public sensorOn(fn: Function) {
    this.fn = fn;
    this.count = 0;
    // 加速度传感器
    sensor.on(
      sensor.SensorId.ACCELEROMETER,
      (data) => {
        if (this.x1 === data.x && this.y1 === data.y && this.z1 === data.z) {
          return;
        }
        this.x1 = data.x;
        this.y1 = data.y;
        this.z1 = data.z;
        this.count++;
        if (this.count > 5) {
          this.fn?.();
          this.count = 0;
        }
      },
      { interval: 100000000 }
    );
  }

  // 关闭传感器
  public sensorOff() {
    console.log("关闭传感器");
    this.count = 0;
    sensor.off(sensor.SensorId.ACCELEROMETER);
  }
}

export default ShakeSensor;

引入到业务场景

struct ShakePage {
  onPageShow(): void {
    this.shake.sensorOn(() => {
      console.log("摇一摇");
    })
  }

  onPageHide(): void {
    this.shake.sensorOff();
  }

  build() {
    Collumn()
  }
}

关注飞龙,领取更多干货

Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐