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
还需要动态添加 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 对应的是加速度计。
建议流程:
- 在 module.json5 中声明 ohos.permission.ACTIVITY_MOTION。
- 该权限属于用户授权权限,需要运行时通过 requestPermissionsFromUser 申请。
- 授权成功后再调用 sensor.on(sensor.SensorId.PEDOMETER, …)。
- 订阅前可用 sensor.getSingleSensor(sensor.SensorId.PEDOMETER) 判断设备是否支持计步器。
依据:
在鸿蒙Next中,传感器权限属于system_basic或system_core级别,需在module.json5的requestPermissions中声明ohos.permission.ACTIVITY_MOTION等具体权限,并配置accesstoken的type为system_grant。若仍失败,检查设备是否支持该传感器、应用是否已签名且权限等级匹配。
报错201表示权限不足。你在module.json5中声明的是加速度计权限ohos.permission.ACCELEROMETER,但代码调用的sensor.SensorId.PEDOMETER是计步器传感器。计步器需要的是ohos.permission.ACTIVITY_MOTION权限,与加速度计不同。请将权限声明改为该权限即可。

