鸿蒙中传感器判断移动

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)
  }
}
相关推荐
爱笑的眼睛111 天前
HarmonyOS文件压缩与解压缩API深度解析与实践
华为·harmonyos
柒儿吖1 天前
Qt for HarmonyOS 水平进度条组件开发实战
开发语言·qt·harmonyos
xiaocao_10231 天前
鸿蒙手机上有没有轻便好用的备忘录APP?
华为·智能手机·harmonyos
qq_316837751 天前
华为CCE k8s 使用nfs-subdir-external-provisioner 创建pvc时自动创建pv
windows·华为·kubernetes
程序员老刘1 天前
4:2:1!老刘的三季度项目报告
flutter·harmonyos·客户端
深盾科技1 天前
鸿蒙应用构建体系深度解析:ABC、HAP、HAR、HSP与APP的技术全貌
华为·harmonyos
大师兄66681 天前
HarmonyOS新闻卡片组件开发实战:自定义组件与List渲染深度解析
移动开发·harmonyos·自定义组件·组件通信·分类筛选·新闻卡片·list渲染
一名机电研究生1 天前
华为、阿里巴巴、字节跳动 100+ Linux面试问题总结(一)
linux·华为·面试
晴殇i2 天前
关于前端基础快速跨入鸿蒙HarmonyOS开发
前端·harmonyos
ChinaDragon2 天前
HarmonyOS:弹出框控制器
harmonyos