鸿蒙中传感器判断移动

1、权限

TypeScript 复制代码
     {
        "name": "ohos.permission.ACCELEROMETER",
        "reason": "$string:accelerometer_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.GYROSCOPE",
        "reason": "$string:gyroscope_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }
      },
      {
        "name": "ohos.permission.ACTIVITY_MOTION",
        "reason": "$string:activity_motion_reason",
        "usedScene": {
          "abilities": ["EntryAbility"],
          "when": "inuse"
        }

2、使用

TypeScript 复制代码
import { sensor } from '@kit.SensorServiceKit';
import { abilityAccessCtrl, common, Permissions } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  @State isWalking: boolean = false;
  @State hasPermission: boolean = false;
  private context = getContext(this) as common.UIAbilityContext;

  async aboutToAppear(): Promise<void> {
    await this.requestPermission();
  }

  async requestPermission(): Promise<void> {
    const atManager = abilityAccessCtrl.createAtManager();
    const permission: Permissions = 'ohos.permission.ACTIVITY_MOTION';

    const grantStatus = await atManager.checkAccessToken(
      this.context.applicationInfo.accessTokenId,
      permission
    );

    if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
      this.hasPermission = true;
      return;
    }

    const result = await atManager.requestPermissionsFromUser(this.context, [permission]);
    this.hasPermission = result.authResults[0] === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;
  }

  onPageShow(): void {
    if (!this.hasPermission) {
      return;
    }

    sensor.on(sensor.SensorId.PEDOMETER_DETECTION, (data: sensor.PedometerDetectionResponse) => {
      this.isWalking = data.scalar === 1;
      console.log(this.isWalking ? ' 正在行走' : ' 停止行走');
    });
  }

  onPageHide(): void {
    sensor.off(sensor.SensorId.PEDOMETER_DETECTION);
  }

  build() {
    Column({ space: 20 }) {
      if (!this.hasPermission) {
        Text(' 需要运动检测权限')
        Button('授权').onClick(async () => {
          await this.requestPermission();
          if (this.hasPermission) {
            this.onPageShow();
          }
        })
      } else {
        Text(this.isWalking ? ' 正在行走' : ' 静止中')
          .fontSize(30)
          .fontColor(this.isWalking ? Color.Green : Color.Gray)
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}
相关推荐
星释5 小时前
鸿蒙Flutter三方库适配指南-02.Flutter相关知识基础
flutter·华为·harmonyos
爱笑的眼睛115 小时前
HarmonyOS Canvas画布组件:高级图形绘制技术解析
华为·harmonyos
2501_919749035 小时前
鸿蒙:将Resource类型的image转成 image.PixelMap 类型
华为·harmonyos·鸿蒙
爱笑的眼睛115 小时前
HarmonyOS 环境光传感器自适应:构建智能光线感知应用
华为·harmonyos
猫林老师5 小时前
HarmonyOS物联网设备连接与管理实战
物联网·华为·harmonyos
二流小码农7 小时前
鸿蒙开发:web页面如何适配深色模式
android·ios·harmonyos
爱笑的眼睛118 小时前
HarmonyOS心率传感器数据采集:从原理到高级应用实践
华为·harmonyos
爱笑的眼睛1111 小时前
HarmonyOS中Radio单选框组件的交互设计深度解析
华为·harmonyos
文火冰糖的硅基工坊14 小时前
[人工智能-大模型-84]:大模型应用层 - AI/AR眼镜:华为智能眼镜、苹果智能眼镜、Google Glass智能眼镜
华为