鸿蒙next教程:传感器开发指导(ArkTS)
本文介绍了鸿蒙系统传感器开发的核心知识点,包括传感器数据监听接口的使用方法,如持续监听(on)、单次监听(once)和取消监听(off)。
·
往期鸿蒙全套实战文章必看:(附带鸿蒙全栈学习资料)
传感器开发指导(ArkTS)
场景介绍
当设备需要获取传感器数据时,可以使用sensor模块,例如:通过订阅方向传感器数据感知用户设备当前的朝向,通过订阅计步传感器数据统计用户的步数等。
接口说明
| 名称 | 描述 |
|---|---|
| sensor.on(sensorId, callback:AsyncCallback<Response>, options?: Options): void | 持续监听传感器数据变化。 |
| sensor.on(type: 'sensorStatusChange', callback: Callback<SensorStatusEvent>): void | 监听传感器动态上下线的状态变化,callback返回传感器状态事件数据。 |
| sensor.once(sensorId, callback:AsyncCallback<Response>): void | 获取一次传感器数据变化。 |
| sensor.off(sensorId, callback?:AsyncCallback<void>): void | 注销传感器数据的监听。 |
| sensor.off(sensorId, sensorInfoParam?: SensorInfoParam, callback?:AsyncCallback<void>): void | 注销传感器数据的监听,可传入设置参数。 |
| sensor.off(type: 'sensorStatusChange', callback?: Callback<SensorStatusEvent>): void | 注销传感器动态上下线的状态变化的监听。 |
| sensor.getSensorList(callback: AsyncCallback<Array<Sensor>>): void | 获取设备上的所有传感器信息。 |
开发步骤
开发步骤以加速度传感器ACCELEROMETER为例。
-
导入模块。
import { sensor } from '@kit.SensorServiceKit'; import { BusinessError } from '@kit.BasicServicesKit'; -
查询设备支持的所有传感器的参数。
sensor.getSensorList((error: BusinessError, data: Array<sensor.Sensor>) => { if (error) { console.error('getSensorList failed'); } else { console.info('getSensorList success'); for (let i = 0; i < data.length; i++) { console.info(JSON.stringify(data[i])); } } });
该传感器支持的最小采样周期为5000000纳秒,最大采样周期是200000000纳秒。不同传感器支持的采样周期范围也不同,interval应该设置在传感器支持范围内,大于最大值时以最大值上报数据,小于最小值时以最小值上报数据。设置数值越小数据上报越频繁,其功耗越大。
根据设备Id查询传感器。
try { const deviceId = 1; // 第一个参数deviceId 非必填,默认查询的为本地设备 const sensorList: sensor.Sensor[] = sensor.getSensorListByDeviceSync(deviceId); console.log(`sensorList length: ${sensorList.length}`); console.log(`sensorList: ${JSON.stringify(sensorList)}`); } catch (error) { let e: BusinessError = error as BusinessError; console.error(`Failed to get sensorList. Code: ${e.code}, message: ${e.message}`); } -
检查是否已经配置相应权限。
-
注册监听。可以通过on()和once()两种接口监听传感器的调用结果。
通过on()接口,实现对传感器的持续监听,传感器上报周期interval设置为100000000纳秒。
import { sensor } from '@kit.SensorServiceKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => { console.info("Succeeded in obtaining data. x: " + data.x + " y: " + data.y + " z: " + data.z); }, { interval: 100000000 }); } catch (error) { let e: BusinessError = error as BusinessError; console.error(`Failed to get sensorList. Code: ${e.code}, message: ${e.message}`); }第三个参数还可以传入SensorInfoParam,传递deviceId、sensorIndex。
import { sensor } from '@kit.SensorServiceKit'; import { BusinessError } from '@kit.BasicServicesKit'; try { sensor.on(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => { console.info("Succeeded in obtaining data. x: " + data.x + " y: " + data.y + " z: " + data.z); }, { interval: 100000000, sensorInfoParam: { deviceId: 1, sensorIndex: 3 } }); } catch (error) { let e: BusinessError = error as BusinessError; console.error(`Failed to get sensorList. Code: ${e.code}, message: ${e.message}`); }
通过once()接口,实现对传感器的一次监听。
sensor.once(sensor.SensorId.ACCELEROMETER, (data: sensor.AccelerometerResponse) => { console.info("Succeeded in obtaining data. x: " + data.x + " y: " + data.y + " z: " + data.z); });
-
取消持续监听。
取消持续监听,此场景下未订阅而取消监听为异常行为,需处理异常。
sensor.off(sensor.SensorId.ACCELEROMETER);根据SensorInfoParam取消监听。
sensor.off(sensor.SensorId.ACCELEROMETER, { deviceId: 1, sensorIndex: 3 }); -
动态传感器状态的监听,在收到设备下线事件通知时,用户应主动调用off关闭该设备上的传感器。
注册监听, SensorStatusEvent 会返回事件时间戳、传感器ID、传感器索引、上线或下线、设备id、设备名称等值。
sensor.on('sensorStatusChange', (data: sensor.SensorStatusEvent) => { console.log(`timestamp: ${data.timestamp}, deviceId: ${data.deviceId} deviceName: ${data.deviceName} sensorId: ${data.sensorId} sensorIndex:${data.sensorIndex} isSensorOnline: ${data.isSensorOnline}`) });取消监听。
// 请在订阅后在使用此接口取消订阅 sensor.off('sensorStatusChange');
更多推荐



所有评论(0)