HarmonyOS 鸿蒙Next中写入传感器权限却获取失败

HarmonyOS 鸿蒙Next中写入传感器权限却获取失败 我根据案例:https://developer.huawei.com/consumer/cn/doc/architecture-guides/practice-sports-health-app-architecture-v1-0000001952522073#section149631440245

在module.json5配置权限ohos.permission.ACCELEROMETER

代码中使用

sensor.on(sensor.SensorId.PEDOMETER, (data: sensor.PedometerResponse) => {
this.stepNum = data.steps ? data.steps : 0;
}, { interval: 100000000 });

却报错201


更多关于HarmonyOS 鸿蒙Next中写入传感器权限却获取失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

还需要动态添加 ohos.permission.ACTIVITY_MOTION 允许应用读取用户的运动状态
然后再使用即可

import { abilityAccessCtrl, common } from '@kit.AbilityKit';
import { sensor } from '@kit.SensorServiceKit';

@Entry
@Component
struct HotspotIPPage {
    private context = this.getUIContext().getHostContext() as common.UIAbilityContext;

    aboutToAppear(): void {
        abilityAccessCtrl.createAtManager()
            .requestPermissionsFromUser(this.getUIContext().getHostContext()!, ['ohos.permission.ACTIVITY_MOTION']);
    }

    build() {
        Column() {
            Button('获取')
                .onClick(() => {
                    sensor.on(sensor.SensorId.PEDOMETER, (data: sensor.PedometerResponse) => {
                        let stepNum = data.steps ? data.steps : 0;
                        console.info('Pedometer sensor: ' + stepNum);
                    }, { interval: 100000000 });

                })
        }
    }

}

更多关于HarmonyOS 鸿蒙Next中写入传感器权限却获取失败的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


201 是权限错误,但这里声明的权限和订阅的传感器不匹配。你订阅的是 sensor.SensorId.PEDOMETER,官方 sensor API 中 Pedometer 需要的是 ohos.permission.ACTIVITY_MOTION,不是 ohos.permission.ACCELEROMETER。ACCELEROMETER 对应的是加速度计。

建议流程:

  1. 在 module.json5 中声明 ohos.permission.ACTIVITY_MOTION。
  2. 该权限属于用户授权权限,需要运行时通过 requestPermissionsFromUser 申请。
  3. 授权成功后再调用 sensor.on(sensor.SensorId.PEDOMETER, …)。
  4. 订阅前可用 sensor.getSingleSensor(sensor.SensorId.PEDOMETER) 判断设备是否支持计步器。

依据:

Sensor 官方文档

应用权限列表

Sensor 使用指导

在鸿蒙Next中,传感器权限属于system_basic或system_core级别,需在module.json5requestPermissions中声明ohos.permission.ACTIVITY_MOTION等具体权限,并配置accesstokentypesystem_grant。若仍失败,检查设备是否支持该传感器、应用是否已签名且权限等级匹配。

报错201表示权限不足。你在module.json5中声明的是加速度计权限ohos.permission.ACCELEROMETER,但代码调用的sensor.SensorId.PEDOMETER是计步器传感器。计步器需要的是ohos.permission.ACTIVITY_MOTION权限,与加速度计不同。请将权限声明改为该权限即可。

回到顶部