鸿蒙中传感器判断移动

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)
  }
}
相关推荐
骐骥12 小时前
学习:使用postMessage()建立应用侧与前端页面的数据通道
harmonyos·鸿蒙·jsbridge·postmessage·数据通道
HwJack209 小时前
鸿蒙开发ArkData 全景与选型决策:三种存储到底用哪个
华为·harmonyos
czhm579 小时前
基于 HarmonyOS ArkTS API 24,工具函数抽离业务计算逻辑,状态颜色判断解耦组件代码
harmonyos·arkts
lilian23310 小时前
HarmonyOS 7 新特性(九)|碰一碰精准分享与互动卡片
华为·harmonyos
lilian23310 小时前
HarmonyOS 7 新特性(十)|DevEco Code 与 DevEco CLI AI 开发提效
人工智能·华为·harmonyos
袁震11 小时前
HarmonyOS 应用包体积优化与上架自检实战:从 76.2MB 到 3.6MB
java·华为·性能优化·harmonyos
2501_9197490312 小时前
华为鸿蒙免费美食APP—小羊美食
华为·harmonyos·美食
czhm5713 小时前
HarmonyOS 6.1 实战:长列表 ForEach 性能优化,大数据量列表避免不必要的组件重渲染
华为·harmonyos
lilian23314 小时前
HarmonyOS 7 新特性(七)|JsLeakWatcher 与 HWASan 内存治理
华为·harmonyos
2501_9197490314 小时前
华为鸿蒙免费养猫APP—小羊养猫
华为·harmonyos·鸿蒙