鸿蒙中传感器判断移动

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)
  }
}
相关推荐
萌虎不虎7 小时前
【在鸿蒙系统中实现拍照预览功能】
华为·harmonyos
萌虎不虎9 小时前
【鸿蒙实现显示屏测试实现方法】
华为·harmonyos
用户59514332217712 小时前
HarmonyOS应用开发之滚动容器Scroll
harmonyos
用户59514332217712 小时前
HarmonyOS应用开发之瀑布流、上拉加载、无限滚动一文搞定
harmonyos
用户59514332217712 小时前
鸿蒙应用开发之@Builder自定义构建函数:值传递与引用传递与UI更新
harmonyos
不爱吃糖的程序媛13 小时前
Flutter 开发的鸿蒙AtomGit OAuth 授权应用
华为·harmonyos
xq952718 小时前
编程之路 2025年终总结 ,勇往直前 再战江湖
harmonyos
不爱吃糖的程序媛19 小时前
鸿蒙PC命令行开发 macOS 上解决 pkg-config 命令未安装的问题
macos·华为·harmonyos
二流小码农21 小时前
鸿蒙开发:自定义一个圆形动画菜单
android·ios·harmonyos
yumgpkpm21 小时前
Cloudera CDP7、CDH5、CDH6 在华为鲲鹏 ARM 麒麟KylinOS做到无缝切换平缓迁移过程
大数据·arm开发·华为·flink·spark·kafka·cloudera