1# Sensor 2<!--Kit: Sensor Service Kit--> 3<!--Subsystem: Sensors--> 4<!--Owner: @dilligencer--> 5<!--Designer: @butterls--> 6<!--Tester: @murphy84--> 7<!--Adviser: @hu-zhiqiong--> 8 9## 概述 10 11提供API来使用常见的传感器特性。例如,调用API来获取传感器和订阅或取消订阅传感器数据。 12 13提供标准的开放api,定义常用传感器属性。 14 15**起始版本**:11 16 17 18## 汇总 19 20 21### 文件 22 23| 名称 | 描述 | 24| -------- | -------- | 25| [oh_sensor.h](oh_sensor_8h.md) | 声明操作传感器的API,包括获取传感器信息和订阅取消订阅传感器数据。 | 26| [oh_sensor_type.h](oh_sensor_type_8h.md) | 定义常用传感器属性。 | 27 28 29### 类型定义 30 31| 名称 | 描述 | 32| -------- | -------- | 33| [Sensor_Type](#sensor_type) | 枚举传感器类型。 | 34| [Sensor_Result](#sensor_result) | 定义传感器错误码。 | 35| [Sensor_Accuracy](#sensor_accuracy) | 枚举传感器上报的数据的精度级别。 | 36| [Sensor_Info](#sensor_info) | 定义传感器信息。 | 37| [Sensor_Event](#sensor_event) | 定义传感器数据信息。 | 38| [Sensor_SubscriptionId](#sensor_subscriptionid) | 定义传感器订阅ID,唯一标识传感器。 | 39| [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) | 定义传感器订阅属性。 | 40| void ([*Sensor_EventCallback](#sensor_eventcallback)) ([Sensor_Event](#sensor_event) \*event) | 定义用于传感器数据的回调函数。 | 41| [Sensor_Subscriber](#sensor_subscriber) | 定义传感器订阅者信息。 | 42 43 44### 枚举 45 46| 名称 | 描述 | 47| -------- | -------- | 48| [Sensor_Type](#sensor_type) {<br/>SENSOR_TYPE_ACCELEROMETER = 1, <br/>SENSOR_TYPE_GYROSCOPE = 2,<br/> SENSOR_TYPE_AMBIENT_LIGHT = 5, <br/>SENSOR_TYPE_MAGNETIC_FIELD = 6,<br/>SENSOR_TYPE_BAROMETER = 8,<br/> SENSOR_TYPE_HALL = 10, <br/>SENSOR_TYPE_PROXIMITY = 12,<br/> SENSOR_TYPE_ORIENTATION = 256,<br/>SENSOR_TYPE_GRAVITY = 257, <br/>SENSOR_TYPE_LINEAR_ACCELERATION = 258,<br/>SENSOR_TYPE_ROTATION_VECTOR = 259,<br/>SENSOR_TYPE_GAME_ROTATION_VECTOR = 262,<br/>SENSOR_TYPE_PEDOMETER_DETECTION = 265,<br/> SENSOR_TYPE_PEDOMETER = 266,<br/>SENSOR_TYPE_HEART_RATE = 278<br/>} | 枚举传感器类型。 | 49| [Sensor_Result](#sensor_result) { <br/>SENSOR_SUCCESS = 0,<br/> SENSOR_PERMISSION_DENIED = 201, <br/>SENSOR_PARAMETER_ERROR = 401,<br/> SENSOR_SERVICE_EXCEPTION = 14500101<br/> } | 定义传感器错误码。 | 50| [Sensor_Accuracy](#sensor_accuracy) { <br/>SENSOR_ACCURACY_UNRELIABLE = 0, <br/>SENSOR_ACCURACY_LOW = 1,<br/> SENSOR_ACCURACY_MEDIUM = 2, <br/>SENSOR_ACCURACY_HIGH = 3 <br/>} | 枚举传感器上报数据的精度级别。 | 51 52 53### 函数 54 55| 名称 | 描述 | 56| -------- | -------- | 57| [OH_Sensor_GetInfos](#oh_sensor_getinfos)([Sensor_Info](#sensor_info) **infos, uint32_t *count) | 获取设备上所有传感器的信息。 | 58| [OH_Sensor_Subscribe](#oh_sensor_subscribe)(const [Sensor_SubscriptionId](#sensor_subscriptionid) *id, const [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) *attribute, const [Sensor_Subscriber](#sensor_subscriber) *subscriber) | 订阅传感器数据。系统将以指定的频率向用户上报传感器数据。<br/>订阅加速度传感器,需要申请ohos.permission.ACCELEROMETER权限;<br/>订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限;<br/>订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限;<br/>订阅与健康相关的传感器时,比如心率传感器需要申请ohos.permission.READ_HEALTH_DATA权限,否则订阅失败;<br/>订阅其余传感器不需要申请权限。 | 59| [OH_Sensor_Unsubscribe](#oh_sensor_unsubscribe)(const [Sensor_SubscriptionId](#sensor_subscriptionid) *id, const [Sensor_Subscriber](#sensor_subscriber) *subscriber) | 取消订阅传感器数据。<br/>取消订阅加速度计传感器,需要申请ohos.permission.ACCELEROMETER权限; <br/>取消订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限; <br/>取消订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限;<br/>取消订阅与健康相关的传感器时,需要申请ohos.permission.READ_HEALTH_DATA权限,否则取消订阅失败。 <br/>取消订阅其余传感器不需要申请权限。 | 60| [OH_Sensor_CreateInfos](#oh_sensor_createinfos)(uint32_t count) | 用给定的数字创建一个实例数组,请参考[Sensor_Info](#sensor_info)。 | 61| [OH_Sensor_DestroyInfos](#oh_sensor_destroyinfos)([Sensor_Info](#sensor_info) **sensors, uint32_t count) | 销毁实例数组并回收内存,请参考[Sensor_Info](#sensor_info)。 | 62| [OH_SensorInfo_GetName](#oh_sensorinfo_getname)([Sensor_Info](#sensor_info) *sensor, char *sensorName, uint32_t *length) | 获取传感器名称。 | 63| [OH_SensorInfo_GetVendorName](#oh_sensorinfo_getvendorname)([Sensor_Info](#sensor_info)* sensor, char *vendorName, uint32_t *length) | 获取传感器的厂商名称。 | 64| [OH_SensorInfo_GetType](#oh_sensorinfo_gettype)([Sensor_Info](#sensor_info)* sensor, [Sensor_Type](#sensor_type) *sensorType) | 获取传感器类型。 | 65| [OH_SensorInfo_GetResolution](#oh_sensorinfo_getresolution)([Sensor_Info](#sensor_info)* sensor, float *resolution) | 获取传感器分辨率。 | 66| [OH_SensorInfo_GetMinSamplingInterval](#oh_sensorinfo_getminsamplinginterval)([Sensor_Info](#sensor_info)* sensor, int64_t *minSamplingInterval) | 获取传感器的最小数据上报间隔。 | 67| [OH_SensorInfo_GetMaxSamplingInterval](#oh_sensorinfo_getmaxsamplinginterval)([Sensor_Info](#sensor_info)* sensor, int64_t *maxSamplingInterval) | 获取传感器的最大数据上报间隔时间。 | 68| [OH_SensorEvent_GetType](#oh_sensorevent_gettype)([Sensor_Event](#sensor_event)* sensorEvent, [Sensor_Type](#sensor_type) *sensorType) | 获取传感器类型。 | 69| [OH_SensorEvent_GetTimestamp](#oh_sensorevent_gettimestamp)([Sensor_Event](#sensor_event)* sensorEvent, int64_t *timestamp) | 获取传感器数据的时间戳。 | 70| [OH_SensorEvent_GetAccuracy](#oh_sensorevent_getaccuracy)([Sensor_Event](#sensor_event)* sensorEvent, Sensor_Accuracy *accuracy) | 获取传感器数据的精度。 | 71| [OH_SensorEvent_GetData](#oh_sensorevent_getdata)([Sensor_Event](#sensor_event)* sensorEvent, float **data, uint32_t *length) | 获取传感器数据。<br/>数据的长度和内容依赖于监听的传感器类型,传感器上报的数据格式如下:<br/>1.SENSOR_TYPE_ACCELEROMETER:data[0]、data[1]、data[2]分别表示设备x、y、z轴的加速度分量,单位m/s²;<br/>2.SENSOR_TYPE_GYROSCOPE:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角速度,单位弧度/s;<br/>3.SENSOR_TYPE_AMBIENT_LIGHT:data[0]表示环境光强度,单位lux;从API Version 12开始,将返回两个额外的数据,其中data[1]表示色温,单位kelvin;data[2]表示红外亮度,单位cd/m²;<br/>4. SENSOR_TYPE_MAGNETIC_FIELD:data[0]、data[1]、data[2]分别表示设备x、y、z轴的地磁分量,单位微特斯拉; <br/>5.SENSOR_TYPE_BAROMETER:data[0]表示气压值,单位hPa;<br/>6.SENSOR_TYPE_HALL:data[0]表示皮套吸合状态,0表示打开,大于0表示吸附;<br/>7.SENSOR_TYPE_PROXIMITY:data[0]表示接近状态,0表示接近,大于0表示远离;<br/>8.SENSOR_TYPE_ORIENTATION:data[0]、data[1]、data[2]分别表示设备绕z、x、y轴的角度,单位度;<br/>9.SENSOR_TYPE_GRAVITY:data[0]、data[1]、data[2]分别表示设备x、y、z轴的重力加速度分量,单位m/s²;<br/>10.SENSOR_TYPE_ROTATION_VECTOR:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角度,单位度,data[3]表示旋转向量元素;<br/>11.SENSOR_TYPE_PEDOMETER_DETECTION:data[0]表示计步检测状态,1表示检测到了步数变化;<br/>12.SENSOR_TYPE_PEDOMETER:data[0]表示步数;<br/>13.SENSOR_TYPE_HEART_RATE:data[0]表示心率数值;<br/>14.SENSOR_TYPE_LINEAR_ACCELERATION:从API Version 13开始支持,data[0]、data[1]、data[2]分别表示绕设备的x、y、z的线性加速度,单位m/s²;<br/>15.SENSOR_TYPE_GAME_ROTATION_VECTOR:从API Version 13开始支持,data[0]、data[1]、data[2]分别表示设备分别围绕x、y、z的旋转角度,单位为度,data[3]表示旋转向量。 | 72| [OH_Sensor_CreateSubscriptionId](#oh_sensor_createsubscriptionid)(void) | 创建一个[Sensor_SubscriptionId](#sensor_subscriptionid)实例。 | 73| [OH_Sensor_DestroySubscriptionId](#oh_sensor_destroysubscriptionid)([Sensor_SubscriptionId](#sensor_subscriptionid) *id) | 销毁[Sensor_SubscriptionId](#sensor_subscriptionid)实例并回收内存。 | 74| [OH_SensorSubscriptionId_GetType](#oh_sensorsubscriptionid_gettype)([Sensor_SubscriptionId](#sensor_subscriptionid) *id, [Sensor_Type](#sensor_type) *sensorType) | 获取传感器类型。 | 75| [OH_SensorSubscriptionId_SetType](#oh_sensorsubscriptionid_settype)([Sensor_SubscriptionId](#sensor_subscriptionid)* id, const [Sensor_Type](#sensor_type) sensorType) | 设置传感器类型。 | 76| [OH_Sensor_CreateSubscriptionAttribute](#oh_sensor_createsubscriptionattribute)(void) | 创建[Sensor_SubscriptionAttribute](#sensor_subscriptionattribute)实例。 | 77| [OH_Sensor_DestroySubscriptionAttribute](#oh_sensor_destroysubscriptionattribute)([Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) *attribute) | 销毁[Sensor_SubscriptionAttribute](#sensor_subscriptionattribute)实例并回收内存。 | 78| [OH_SensorSubscriptionAttribute_SetSamplingInterval](#oh_sensorsubscriptionattribute_setsamplinginterval)([Sensor_SubscriptionAttribute](#sensor_subscriptionattribute)* attribute, const int64_t samplingInterval) | 设置传感器数据上报间隔。 | 79| [OH_SensorSubscriptionAttribute_GetSamplingInterval](#oh_sensorsubscriptionattribute_getsamplinginterval) ([Sensor_SubscriptionAttribute](#sensor_subscriptionattribute)* attribute, int64_t *samplingInterval) | 获取传感器数据上报间隔。 | 80| [OH_Sensor_CreateSubscriber](#oh_sensor_createsubscriber)(void) | 创建一个[Sensor_Subscriber](#sensor_subscriber)实例。 | 81| [OH_Sensor_DestroySubscriber](#oh_sensor_destroysubscriber)([Sensor_Subscriber](#sensor_subscriber) *subscriber) | 销毁[Sensor_Subscriber](#sensor_subscriber)实例并回收内存。 | 82| [OH_SensorSubscriber_SetCallback](#oh_sensorsubscriber_setcallback)([Sensor_Subscriber](#sensor_subscriber)* subscriber, const [Sensor_EventCallback](#sensor_eventcallback) callback) | 设置一个回调函数来上报传感器数据。 | 83| [OH_SensorSubscriber_GetCallback](#oh_sensorsubscriber_getcallback)([Sensor_Subscriber](#sensor_subscriber)* subscriber, [Sensor_EventCallback](#sensor_eventcallback) *callback) | 获取用于上报传感器数据的回调函数。 | 84 85 86## 类型定义说明 87 88 89### Sensor_Accuracy 90 91``` 92typedef enum Sensor_Accuracy Sensor_Accuracy 93``` 94**描述**: 95 96枚举传感器上报的数据的精度级别。 97 98**起始版本**:11 99 100 101### Sensor_Event 102 103``` 104typedef struct Sensor_Event Sensor_Event 105``` 106**描述**: 107 108定义传感器数据信息。 109 110**起始版本**:11 111 112 113### Sensor_EventCallback 114 115``` 116typedef void(*Sensor_EventCallback)(Sensor_Event *event) 117``` 118**描述**: 119 120定义用于上报传感器数据的回调函数。 121 122**起始版本**:11 123 124 125### Sensor_Info 126 127``` 128typedef struct Sensor_Info Sensor_Info 129``` 130**描述**: 131 132定义传感器信息。 133 134**起始版本**:11 135 136 137### Sensor_Result 138 139``` 140typedef enum Sensor_Result Sensor_Result 141``` 142**描述**: 143 144定义传感器错误码。 145 146**起始版本**:11 147 148 149### Sensor_Subscriber 150 151``` 152typedef struct Sensor_Subscriber Sensor_Subscriber 153``` 154**描述**: 155 156定义传感器订阅者信息。 157 158**起始版本**:11 159 160 161### Sensor_SubscriptionAttribute 162 163``` 164typedef struct Sensor_SubscriptionAttribute Sensor_SubscriptionAttribute 165``` 166**描述**: 167 168定义传感器订阅属性。 169 170**起始版本**:11 171 172 173### Sensor_SubscriptionId 174 175``` 176typedef struct Sensor_SubscriptionId Sensor_SubscriptionId 177``` 178**描述**: 179 180定义传感器订阅ID,唯一标识传感器。 181 182**起始版本**:11 183 184 185### Sensor_Type 186 187``` 188typedef enum Sensor_Type Sensor_Type 189``` 190**描述**: 191 192枚举传感器类型。 193 194**起始版本**:11 195 196 197## 枚举类型说明 198 199 200### Sensor_Accuracy 201 202``` 203enum Sensor_Accuracy 204``` 205**描述**: 206 207枚举传感器上报的数据的精度级别。 208 209**起始版本**:11 210 211| 枚举值 | 描述 | 212| -------- | -------- | 213| SENSOR_ACCURACY_UNRELIABLE | 传感器数据不可靠。有可能传感器不与设备接触而进行测量。 | 214| SENSOR_ACCURACY_LOW | 传感器数据精度较低。数据在使用前必须根据环境进行校准。 | 215| SENSOR_ACCURACY_MEDIUM | 传感器数据处于中等精度水平。建议用户在使用前根据实际环境进行数据校准。 | 216| SENSOR_ACCURACY_HIGH | 传感器数据具有很高的精度。数据可以直接使用。 | 217 218 219### Sensor_Result 220 221``` 222enum Sensor_Result 223``` 224**描述**: 225 226定义传感器错误码。 227 228**起始版本**:11 229 230| 枚举值 | 描述 | 231| -------- | -------- | 232| SENSOR_SUCCESS | 操作成功。 | 233| SENSOR_PERMISSION_DENIED | 权限验证失败。 | 234| SENSOR_PARAMETER_ERROR | 参数检查失败。例如,没有传入强制参数,或者传入的参数类型不正确。 | 235| SENSOR_SERVICE_EXCEPTION | 传感器服务异常。 | 236 237 238### Sensor_Type 239 240``` 241enum Sensor_Type 242``` 243**描述**: 244 245枚举传感器类型。 246 247**起始版本**:11 248 249| 枚举值 | 描述 | 250| -------- | -------- | 251| SENSOR_TYPE_ACCELEROMETER | 加速度传感器。 | 252| SENSOR_TYPE_GYROSCOPE | 陀螺仪传感器。 | 253| SENSOR_TYPE_AMBIENT_LIGHT | 环境光传感器。 | 254| SENSOR_TYPE_MAGNETIC_FIELD | 地磁传感器。 | 255| SENSOR_TYPE_BAROMETER | 气压传感器。 | 256| SENSOR_TYPE_HALL | 霍尔传感器。 | 257| SENSOR_TYPE_PROXIMITY | 接近光传感器。 | 258| SENSOR_TYPE_ORIENTATION | 方向传感器。 | 259| SENSOR_TYPE_GRAVITY | 重力传感器。 | 260| SENSOR_TYPE_ROTATION_VECTOR | 旋转矢量传感器。 | 261| SENSOR_TYPE_PEDOMETER_DETECTION | 计步器检测传感器。 | 262| SENSOR_TYPE_PEDOMETER | 计步器传感器。 | 263| SENSOR_TYPE_HEART_RATE | 心率传感器。 | 264 265 266## 函数说明 267 268 269### OH_Sensor_CreateInfos() 270 271``` 272Sensor_Info **OH_Sensor_CreateInfos(uint32_t count) 273``` 274**描述**: 275 276用给定的数字创建一个实例数组,请参考 [Sensor_Info](#sensor_info)。 277 278**起始版本**:11 279 280**参数**: 281 282| 名称 | 描述 | 283| -------- | -------- | 284| count | 要创建的实例的数量,请参考 [Sensor_Info](#sensor_info)。 | 285 286**返回**: 287 288如果操作成功,返回指向 [Sensor_Info](#sensor_info) 实例数组的双指针;否则返回**NULL**。 289 290 291### OH_Sensor_CreateSubscriber() 292 293``` 294Sensor_Subscriber *OH_Sensor_CreateSubscriber(void) 295``` 296**描述**: 297 298创建一个 [Sensor_Subscriber ](#sensor_subscriber)实例。 299 300**起始版本**:11 301 302**返回**: 303 304如果操作成功,返回指向 [Sensor_Subscriber](#sensor_subscriber) 实例的指针;否则返回**NULL**。 305 306**示例**: 307 308详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 309 310 ```c 311 #include "sensors/oh_sensor.h" 312 #include "napi/native_api.h" 313 #include "hilog/log.h" 314 315 const int SENSOR_LOG_DOMAIN = 0xD002700; 316 const char *TAG = "[Sensor]"; 317 318 static napi_value CreateSubscriber(napi_env env, napi_callback_info info) { 319 Sensor_Result ret; 320 // 创建Sensor_Subscriber实例 321 Sensor_Subscriber *subscriberTemp = OH_Sensor_CreateSubscriber(); 322 if (subscriberTemp == nullptr) { 323 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriber failed"); 324 ret = SENSOR_SERVICE_EXCEPTION; 325 } else { 326 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriber successful"); 327 ret = SENSOR_SUCCESS; 328 } 329 // 销毁Sensor_Subscriber实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 330 if (subscriberTemp != nullptr) { 331 OH_Sensor_DestroySubscriber(subscriberTemp); 332 } 333 napi_value result; 334 napi_create_int32(env, ret, &result); 335 return result; 336 } 337 ``` 338 339### OH_Sensor_CreateSubscriptionAttribute() 340 341``` 342Sensor_SubscriptionAttribute *OH_Sensor_CreateSubscriptionAttribute(void) 343``` 344**描述**: 345 346创建 [Sensor_SubscriptionAttribute ](#sensor_subscriptionattribute)实例。 347 348**起始版本**:11 349 350**返回**: 351 352如果操作成功,返回指向 [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) 实例的指针;否则返回**NULL**。 353 354**示例**: 355 356详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 357 358 ```c 359 #include "sensors/oh_sensor.h" 360 #include "napi/native_api.h" 361 #include "hilog/log.h" 362 363 const int SENSOR_LOG_DOMAIN = 0xD002700; 364 const char *TAG = "[Sensor]"; 365 366 static napi_value CreateSubscriptionAttribute(napi_env env, napi_callback_info info) { 367 Sensor_Result ret; 368 // 创建Sensor_SubscriptionAttribute实例 369 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 370 if (attr == nullptr) { 371 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriptionAttribute failed"); 372 ret = SENSOR_SERVICE_EXCEPTION; 373 } else { 374 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriptionAttribute successful"); 375 ret = SENSOR_SUCCESS; 376 } 377 // 销毁Sensor_SubscriptionAttribute实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 378 if (attr != nullptr) { 379 OH_Sensor_DestroySubscriptionAttribute(attr); 380 } 381 napi_value result; 382 napi_create_int32(env, ret, &result); 383 return result; 384 } 385 ``` 386 387### OH_Sensor_CreateSubscriptionId() 388 389``` 390Sensor_SubscriptionId *OH_Sensor_CreateSubscriptionId(void) 391``` 392**描述**: 393 394创建一个 [Sensor_SubscriptionId](#sensor_subscriptionid) 实例。 395 396**起始版本**:11 397 398**返回**: 399 400如果操作成功,返回指向 [Sensor_SubscriptionId](#sensor_subscriptionid) 实例的指针;否则返回**NULL**。 401 402**示例**: 403 404详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 405 406 ```c 407 #include "sensors/oh_sensor.h" 408 #include "napi/native_api.h" 409 #include "hilog/log.h" 410 411 const int SENSOR_LOG_DOMAIN = 0xD002700; 412 const char *TAG = "[Sensor]"; 413 414 static napi_value CreateSubscriptionId(napi_env env, napi_callback_info info) { 415 Sensor_Result ret; 416 // 创建Sensor_SubscriptionId实例 417 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 418 if (id == nullptr) { 419 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriptionId failed"); 420 ret = SENSOR_SERVICE_EXCEPTION; 421 } else { 422 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriptionId successful"); 423 ret = SENSOR_SUCCESS; 424 } 425 // 销毁Sensor_SubscriptionId实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 426 if (id != nullptr) { 427 OH_Sensor_DestroySubscriptionId(id); 428 } 429 napi_value result; 430 napi_create_int32(env, ret, &result); 431 return result; 432 } 433 ``` 434 435### OH_Sensor_DestroyInfos() 436 437``` 438int32_t OH_Sensor_DestroyInfos(Sensor_Info **sensors, uint32_t count) 439``` 440**描述**: 441 442销毁实例数组并回收内存,请参考 [Sensor_Info](#sensor_info)。 443 444**起始版本**:11 445 446**参数**: 447 448| 名称 | 描述 | 449| -------- | -------- | 450| sensors | 指向 [Sensor_Info](#sensor_info) 实例数组的双指针。 | 451| count | 要销毁的 [Sensor_Info](#sensor_info) 实例的数量。 | 452 453**返回**: 454 455如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 456 457 458### OH_Sensor_DestroySubscriber() 459 460``` 461int32_t OH_Sensor_DestroySubscriber(Sensor_Subscriber *subscriber) 462``` 463**描述**: 464 465销毁 [Sensor_Subscriber ](#sensor_subscriber)实例并回收内存。 466 467**起始版本**:11 468 469**参数**: 470 471| 名称 | 描述 | 472| -------- | -------- | 473| subscriber | 指向 [Sensor_Subscriber](#sensor_subscriber) 实例的指针。 | 474 475**返回**: 476 477如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 478 479**示例**: 480 481详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 482 483 ```c 484 #include "sensors/oh_sensor.h" 485 #include "napi/native_api.h" 486 #include "hilog/log.h" 487 488 const int SENSOR_LOG_DOMAIN = 0xD002700; 489 const char *TAG = "[Sensor]"; 490 491 static napi_value DestroySubscriber(napi_env env, napi_callback_info info) { 492 // 创建Sensor_Subscriber实例。 493 Sensor_Subscriber *subscriberTemp = OH_Sensor_CreateSubscriber(); 494 // 销毁Sensor_Subscriber实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁。 495 int32_t ret = OH_Sensor_DestroySubscriber(subscriberTemp); 496 if (ret != SENSOR_SUCCESS) { 497 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriber failed"); 498 } else { 499 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriber successful"); 500 } 501 napi_value result; 502 napi_create_int32(env, ret, &result); 503 return result; 504 } 505 ``` 506 507### OH_Sensor_DestroySubscriptionAttribute() 508 509``` 510int32_t OH_Sensor_DestroySubscriptionAttribute(Sensor_SubscriptionAttribute *attribute) 511``` 512**描述**: 513 514销毁 [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) 实例并回收内存。 515 516**起始版本**:11 517 518**参数**: 519 520| 名称 | 描述 | 521| -------- | -------- | 522| attribute | 指向 [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute) 实例的指针。 | 523 524**返回**: 525 526如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 527 528**示例**: 529 530详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 531 532 ```c 533 #include "sensors/oh_sensor.h" 534 #include "napi/native_api.h" 535 #include "hilog/log.h" 536 537 const int SENSOR_LOG_DOMAIN = 0xD002700; 538 const char *TAG = "[Sensor]"; 539 540 static napi_value DestroySubscriptionAttribute(napi_env env, napi_callback_info info) { 541 // 创建Sensor_SubscriptionAttribute实例。 542 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 543 if (attr == nullptr) { 544 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_CreateSubscriptionAttribute failed"); 545 return nullptr; 546 } 547 // 销毁Sensor_SubscriptionAttribute实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁。 548 int32_t ret = OH_Sensor_DestroySubscriptionAttribute(attr); 549 if (ret != SENSOR_SUCCESS) { 550 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriptionAttribute failed"); 551 } else { 552 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriptionAttribute successful"); 553 } 554 napi_value result; 555 napi_create_int32(env, ret, &result); 556 return result; 557 } 558 ``` 559 560### OH_Sensor_DestroySubscriptionId() 561 562``` 563int32_t OH_Sensor_DestroySubscriptionId(Sensor_SubscriptionId *id) 564``` 565**描述**: 566 567销毁 [Sensor_SubscriptionId](#sensor_subscriptionid) 实例并回收内存。 568 569**起始版本**:11 570 571**参数**: 572 573| 名称 | 描述 | 574| -------- | -------- | 575| id | 指向 [Sensor_SubscriptionId](#sensor_subscriptionid) 实例的指针。 | 576 577**返回**: 578 579如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 580 581**示例**: 582 583详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 584 585 ```c 586 #include "sensors/oh_sensor.h" 587 #include "napi/native_api.h" 588 #include "hilog/log.h" 589 590 const int SENSOR_LOG_DOMAIN = 0xD002700; 591 const char *TAG = "[Sensor]"; 592 593 static napi_value DestroySubscriptionId(napi_env env, napi_callback_info info) { 594 // 创建Sensor_SubscriptionId实例。 595 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 596 // 销毁Sensor_SubscriptionId实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁。 597 int32_t ret = OH_Sensor_DestroySubscriptionId(id); 598 if (ret != SENSOR_SUCCESS) { 599 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriptionId failed"); 600 } else { 601 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_DestroySubscriptionId successful"); 602 } 603 napi_value result; 604 napi_create_int32(env, ret, &result); 605 return result; 606 } 607 ``` 608 609### OH_Sensor_GetInfos() 610 611``` 612Sensor_Result OH_Sensor_GetInfos(Sensor_Info **infos, uint32_t *count) 613``` 614**描述**: 615 616获取设备上所有传感器的信息。 617 618**起始版本**:11 619 620**参数**: 621 622| 名称 | 描述 | 623| -------- | -------- | 624| infos | 双指针指向设备上所有传感器的信息。请参考 [Sensor_Info](#sensor_info)。 | 625| count | 指向设备上传感器数量的指针。 | 626 627**返回**: 628 629如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 630 631 632### OH_Sensor_Subscribe() 633 634``` 635Sensor_Result OH_Sensor_Subscribe(const Sensor_SubscriptionId *id, const Sensor_SubscriptionAttribute *attribute, const Sensor_Subscriber *subscriber) 636``` 637**描述**: 638 639订阅传感器数据。系统将以指定的频率向用户上报传感器数据。 订阅加速度传感器,需要申请ohos.permission.ACCELEROMETER权限; 订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限; 订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限; 订阅与健康相关的传感器时,比如心率传感器,需要申请ohos.permission.READ_HEALTH_DATA权限,否则订阅失败。 订阅其余传感器不需要申请权限。 640 641**起始版本**:11 642 643**参数**: 644 645| 名称 | 描述 | 646| -------- | -------- | 647| id | 指向传感器订阅ID的指针。请参考 [Sensor_SubscriptionId](#sensor_subscriptionid)。 | 648| attribute | 指向订阅属性的指针,该属性用于指定数据报告频率。请参考 [Sensor_SubscriptionAttribute](#sensor_subscriptionattribute)。 | 649| subscriber | 指向订阅者信息的指针,该信息用于指定的回调函数报告传感器数据。请参考 [Sensor_Subscriber](#sensor_subscriber)。 | 650 651**返回**: 652 653如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 654 655**Permission**: 656 657ohos.permission.ACCELEROMETER or ohos.permission.GYROSCOPE or ohos.permission.ACTIVITY_MOTION or ohos.permission.READ_HEALTH_DATA 658 659**示例**: 660 661详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 662 663 ```c 664 #include "sensors/oh_sensor.h" 665 #include "napi/native_api.h" 666 #include "hilog/log.h" 667 #include <thread> 668 669 const int SENSOR_LOG_DOMAIN = 0xD002700; 670 const char *TAG = "[Sensor]"; 671 constexpr Sensor_Type SENSOR_ID { SENSOR_TYPE_ACCELEROMETER }; 672 constexpr uint32_t SENSOR_NAME_LENGTH_MAX = 64; 673 constexpr int64_t SENSOR_SAMPLE_PERIOD = 200000000; 674 constexpr int32_t SLEEP_TIME_MS = 1000; 675 constexpr int64_t INVALID_VALUE = -1; 676 constexpr float INVALID_RESOLUTION = -1.0F; 677 Sensor_Subscriber *g_user = nullptr; 678 679 // 定义回调函数 680 void SensorDataCallbackImpl(Sensor_Event *event) { 681 if (event == nullptr) { 682 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "event is null"); 683 return; 684 } 685 int64_t timestamp = INVALID_VALUE; 686 // 获取传感器数据的时间戳。 687 int32_t ret = OH_SensorEvent_GetTimestamp(event, ×tamp); 688 if (ret != SENSOR_SUCCESS) { 689 return; 690 } 691 Sensor_Type sensorType; 692 // 获取传感器类型。 693 ret = OH_SensorEvent_GetType(event, &sensorType); 694 if (ret != SENSOR_SUCCESS) { 695 return; 696 } 697 Sensor_Accuracy accuracy = SENSOR_ACCURACY_UNRELIABLE; 698 // 获取传感器数据的精度。 699 ret = OH_SensorEvent_GetAccuracy(event, &accuracy); 700 if (ret != SENSOR_SUCCESS) { 701 return; 702 } 703 float *data = nullptr; 704 uint32_t length = 0; 705 // 获取传感器数据。 706 ret = OH_SensorEvent_GetData(event, &data, &length); 707 if (ret != SENSOR_SUCCESS) { 708 return; 709 } 710 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "sensorType:%{public}d, dataLen:%{public}d, accuracy:%{public}d", sensorType, length, accuracy); 711 for (uint32_t i = 0; i < length; ++i) { 712 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "accData[%{public}d]:%{public}f", i, data[i]); 713 } 714 } 715 716 static napi_value Subscribe(napi_env env, napi_callback_info info) { 717 // 创建Sensor_Subscriber实例。 718 g_user = OH_Sensor_CreateSubscriber(); 719 // 设置回调函数来报告传感器数据。 720 int32_t ret = OH_SensorSubscriber_SetCallback(g_user, SensorDataCallbackImpl); 721 if (ret != SENSOR_SUCCESS) { 722 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriber_SetCallback failed"); 723 return nullptr; 724 } 725 // 创建Sensor_SubscriptionId实例。 726 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 727 // 设置传感器类型,示例中设置的是SENSOR_TYPE_ACCELEROMETER类型,需开通ohos.permission.ACCELEROMETER权限 728 // 参考传感器开发指导中 开发步骤第2点配置加速度传感器权限。 729 ret = OH_SensorSubscriptionId_SetType(id, SENSOR_ID); 730 if (ret != SENSOR_SUCCESS) { 731 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionId_SetType failed"); 732 return nullptr; 733 } 734 // 创建Sensor_SubscriptionAttribute实例。 735 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 736 // 设置传感器数据报告间隔。 737 ret = OH_SensorSubscriptionAttribute_SetSamplingInterval(attr, SENSOR_SAMPLE_PERIOD); 738 if (ret != SENSOR_SUCCESS) { 739 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionAttribute_SetSamplingInterval failed"); 740 return nullptr; 741 } 742 // 订阅传感器数据。 743 ret = OH_Sensor_Subscribe(id, attr, g_user); 744 if (ret != SENSOR_SUCCESS) { 745 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe failed"); 746 return nullptr; 747 } 748 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe successful"); 749 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS)); 750 // 取消订阅传感器数据。 751 ret = OH_Sensor_Unsubscribe(id, g_user); 752 if (ret != SENSOR_SUCCESS) { 753 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe failed"); 754 return nullptr; 755 } 756 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe successful"); 757 if (id != nullptr) { 758 // 销毁Sensor_SubscriptionId实例。 759 OH_Sensor_DestroySubscriptionId(id); 760 } 761 if (attr != nullptr) { 762 // 销毁Sensor_SubscriptionAttribute实例。 763 OH_Sensor_DestroySubscriptionAttribute(attr); 764 } 765 if (g_user != nullptr) { 766 // 销毁Sensor_Subscriber实例并回收内存。 767 OH_Sensor_DestroySubscriber(g_user); 768 g_user = nullptr; 769 } 770 return nullptr; 771 } 772 ``` 773 774### OH_Sensor_Unsubscribe() 775 776``` 777Sensor_Result OH_Sensor_Unsubscribe(const Sensor_SubscriptionId *id, const Sensor_Subscriber *subscriber) 778``` 779**描述**: 780 781取消订阅传感器数据。 取消订阅加速度计传感器,需要申请ohos.permission.ACCELEROMETER权限; 取消订阅陀螺仪传感器,需要申请ohos.permission.GYROSCOPE权限; 取消订阅计步器相关传感器时,需要申请ohos.permission.ACTIVITY_MOTION权限; 取消订阅与健康相关的传感器时,需要申请ohos.permission.READ_HEALTH_DATA权限,否则取消订阅失败。 取消订阅其余传感器不需要申请权限。 782 783**起始版本**:11 784 785**参数**: 786 787| 名称 | 描述 | 788| -------- | -------- | 789| id | 指向传感器订阅ID的指针。请参考 [Sensor_SubscriptionId](#sensor_subscriptionid)。 | 790| subscriber | 指向订阅者信息的指针,该信息用于指定的回调函数报告传感器数据。请参考 [Sensor_Subscriber](#sensor_subscriber)。 | 791 792**返回**: 793 794如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 795 796**Permission**: 797 798ohos.permission.ACCELEROMETER or ohos.permission.GYROSCOPE or ohos.permission.ACTIVITY_MOTION or ohos.permission.READ_HEALTH_DATA 799 800**示例**: 801 802详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 803 804 ```c 805 #include "sensors/oh_sensor.h" 806 #include "napi/native_api.h" 807 #include "hilog/log.h" 808 #include <thread> 809 810 const int SENSOR_LOG_DOMAIN = 0xD002700; 811 const char *TAG = "[Sensor]"; 812 constexpr Sensor_Type SENSOR_ID { SENSOR_TYPE_ACCELEROMETER }; 813 constexpr uint32_t SENSOR_NAME_LENGTH_MAX = 64; 814 constexpr int64_t SENSOR_SAMPLE_PERIOD = 200000000; 815 constexpr int32_t SLEEP_TIME_MS = 1000; 816 constexpr int64_t INVALID_VALUE = -1; 817 constexpr float INVALID_RESOLUTION = -1.0F; 818 Sensor_Subscriber *g_user = nullptr; 819 820 // 定义回调函数 821 void SensorDataCallbackImpl(Sensor_Event *event) { 822 if (event == nullptr) { 823 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "event is null"); 824 return; 825 } 826 int64_t timestamp = INVALID_VALUE; 827 // 获取传感器数据的时间戳。 828 int32_t ret = OH_SensorEvent_GetTimestamp(event, ×tamp); 829 if (ret != SENSOR_SUCCESS) { 830 return; 831 } 832 Sensor_Type sensorType; 833 // 获取传感器类型。 834 ret = OH_SensorEvent_GetType(event, &sensorType); 835 if (ret != SENSOR_SUCCESS) { 836 return; 837 } 838 Sensor_Accuracy accuracy = SENSOR_ACCURACY_UNRELIABLE; 839 // 获取传感器数据的精度。 840 ret = OH_SensorEvent_GetAccuracy(event, &accuracy); 841 if (ret != SENSOR_SUCCESS) { 842 return; 843 } 844 float *data = nullptr; 845 uint32_t length = 0; 846 // 获取传感器数据。 847 ret = OH_SensorEvent_GetData(event, &data, &length); 848 if (ret != SENSOR_SUCCESS) { 849 return; 850 } 851 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "sensorType:%{public}d, dataLen:%{public}d, accuracy:%{public}d", sensorType, length, accuracy); 852 for (uint32_t i = 0; i < length; ++i) { 853 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "accData[%{public}d]:%{public}f", i, data[i]); 854 } 855 } 856 857 static napi_value Unsubscribe(napi_env env, napi_callback_info info) { 858 // 创建Sensor_Subscriber实例。 859 g_user = OH_Sensor_CreateSubscriber(); 860 // 设置回调函数来报告传感器数据。 861 int32_t ret = OH_SensorSubscriber_SetCallback(g_user, SensorDataCallbackImpl); 862 if (ret != SENSOR_SUCCESS) { 863 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriber_SetCallback failed"); 864 return nullptr; 865 } 866 // 创建Sensor_SubscriptionId实例。 867 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 868 // 设置传感器类型,示例中设置的是SENSOR_TYPE_ACCELEROMETER类型,需开通ohos.permission.ACCELEROMETER权限 869 // 参考传感器开发指导中 开发步骤第2点配置加速度传感器权限。 870 ret = OH_SensorSubscriptionId_SetType(id, SENSOR_ID); 871 if (ret != SENSOR_SUCCESS) { 872 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionId_SetType failed"); 873 return nullptr; 874 } 875 // 创建Sensor_SubscriptionAttribute实例。 876 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 877 // 设置传感器数据报告间隔。 878 ret = OH_SensorSubscriptionAttribute_SetSamplingInterval(attr, SENSOR_SAMPLE_PERIOD); 879 if (ret != SENSOR_SUCCESS) { 880 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionAttribute_SetSamplingInterval failed"); 881 return nullptr; 882 } 883 // 订阅传感器数据。 884 ret = OH_Sensor_Subscribe(id, attr, g_user); 885 if (ret != SENSOR_SUCCESS) { 886 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe failed"); 887 return nullptr; 888 } 889 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe successful"); 890 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS)); 891 // 取消订阅传感器数据。 892 ret = OH_Sensor_Unsubscribe(id, g_user); 893 if (ret != SENSOR_SUCCESS) { 894 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe failed"); 895 return nullptr; 896 } 897 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe successful"); 898 if (id != nullptr) { 899 // 销毁Sensor_SubscriptionId实例。 900 OH_Sensor_DestroySubscriptionId(id); 901 } 902 if (attr != nullptr) { 903 // 销毁Sensor_SubscriptionAttribute实例。 904 OH_Sensor_DestroySubscriptionAttribute(attr); 905 } 906 if (g_user != nullptr) { 907 // 销毁Sensor_Subscriber实例并回收内存。 908 OH_Sensor_DestroySubscriber(g_user); 909 g_user = nullptr; 910 } 911 return nullptr; 912 } 913 ``` 914 915### OH_SensorEvent_GetAccuracy() 916 917``` 918int32_t OH_SensorEvent_GetAccuracy(Sensor_Event* sensorEvent, Sensor_Accuracy *accuracy) 919``` 920**描述**: 921 922获取传感器数据的精度。 923 924**起始版本**:11 925 926**参数**: 927 928| 名称 | 描述 | 929| -------- | -------- | 930| sensorEvent | 指向传感器数据信息的指针。 | 931| accuracy | 指向精度的指针。 | 932 933**返回**: 934 935如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 936 937 938### OH_SensorEvent_GetData() 939 940``` 941int32_t OH_SensorEvent_GetData(Sensor_Event* sensorEvent, float **data, uint32_t *length) 942``` 943**描述**: 944 945获取传感器数据。数据的长度和内容依赖于监听的传感器类型,传感器上报的数据格式如下: 946 947SENSOR_TYPE_ACCELEROMETER:data[0]、data[1]、data[2]分别表示设备x、y、z轴的加速度分量,单位m/s²; 948 949SENSOR_TYPE_GYROSCOPE:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角速度,单位弧度/s; 950 951SENSOR_TYPE_AMBIENT_LIGHT:data[0]表示环境光强度,in lux; 952 953SENSOR_TYPE_MAGNETIC_FIELD:data[0]、data[1]、data[2]分别表示设备x、y、z轴的地磁分量,单位微特斯拉; 954 955SENSOR_TYPE_BAROMETER:data[0]表示气压值,单位hPa; 956 957SENSOR_TYPE_HALL:data[0]表示皮套吸合状态,0表示打开,大于0表示吸附; 958 959SENSOR_TYPE_PROXIMITY:data[0]表示接近状态,0表示接近,大于0表示远离; 960 961SENSOR_TYPE_ORIENTATION:data[0]、data[1]、data[2]分别表示设备绕z、x、y轴的角度,单位度; 962 963SENSOR_TYPE_GRAVITY:data[0]、data[1]、data[2]分别表示设备x、y、z轴的重力加速度分量,单位m/s²; 964 965SENSOR_TYPE_ROTATION_VECTOR:data[0]、data[1]、data[2]分别表示设备x、y、z轴的旋转角度,单位度,data[3]表示旋转向量元素; 966 967SENSOR_TYPE_PEDOMETER_DETECTION:data[0]表示计步检测状态,1表示检测到了步数变化; 968 969SENSOR_TYPE_PEDOMETER:data[0]表示步数; 970 971SENSOR_TYPE_HEART_RATE:data[0]表示心率数值; 972 973SENSOR_TYPE_LINEAR_ACCELERATION:从API Version 13开始支持,data[0]、data[1]、data[2]分别表示绕设备的x、y、z的线性加速度,单位m/s²; 974 975SENSOR_TYPE_GAME_ROTATION_VECTOR:从API Version 13开始支持,data[0]、data[1]、data[2]分别表示设备分别围绕x、y、z的旋转角度,单位为度,data[3]表示旋转向量。 976 977**起始版本**:11 978 979**参数**: 980 981| 名称 | 描述 | 982| -------- | -------- | 983| sensorEvent | 传感器数据信息。 | 984| data | 出参,传感器数据。 | 985| length | 出参,数组长度。 | 986 987**返回**: 988 989如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 990 991**示例**: 992 993详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 994 995 ```c 996 #include "sensors/oh_sensor.h" 997 #include "napi/native_api.h" 998 #include "hilog/log.h" 999 #include <thread> 1000 1001 const int SENSOR_LOG_DOMAIN = 0xD002700; 1002 const char *TAG = "[Sensor]"; 1003 constexpr Sensor_Type SENSOR_ID { SENSOR_TYPE_ACCELEROMETER }; 1004 constexpr uint32_t SENSOR_NAME_LENGTH_MAX = 64; 1005 constexpr int64_t SENSOR_SAMPLE_PERIOD = 200000000; 1006 constexpr int32_t SLEEP_TIME_MS = 1000; 1007 constexpr int64_t INVALID_VALUE = -1; 1008 constexpr float INVALID_RESOLUTION = -1.0F; 1009 Sensor_Subscriber *g_user = nullptr; 1010 1011 // 定义回调函数 1012 void SensorDataCallbackImpl(Sensor_Event *event) { 1013 if (event == nullptr) { 1014 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "event is null"); 1015 return; 1016 } 1017 int64_t timestamp = INVALID_VALUE; 1018 // 获取传感器数据的时间戳。 1019 int32_t ret = OH_SensorEvent_GetTimestamp(event, ×tamp); 1020 if (ret != SENSOR_SUCCESS) { 1021 return; 1022 } 1023 Sensor_Type sensorType; 1024 // 获取传感器类型。 1025 ret = OH_SensorEvent_GetType(event, &sensorType); 1026 if (ret != SENSOR_SUCCESS) { 1027 return; 1028 } 1029 Sensor_Accuracy accuracy = SENSOR_ACCURACY_UNRELIABLE; 1030 // 获取传感器数据的精度。 1031 ret = OH_SensorEvent_GetAccuracy(event, &accuracy); 1032 if (ret != SENSOR_SUCCESS) { 1033 return; 1034 } 1035 float *data = nullptr; 1036 uint32_t length = 0; 1037 // 获取传感器数据。 1038 ret = OH_SensorEvent_GetData(event, &data, &length); 1039 if (ret != SENSOR_SUCCESS) { 1040 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorEvent_GetData failed"); 1041 return; 1042 } 1043 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorEvent_GetData successful"); 1044 for (uint32_t i = 0; i < length; ++i) { 1045 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "accData[%{public}d]:%{public}f", i, data[i]); 1046 } 1047 } 1048 1049 static napi_value SensorEventGetData(napi_env env, napi_callback_info info) { 1050 // 创建Sensor_Subscriber实例。 1051 g_user = OH_Sensor_CreateSubscriber(); 1052 // 设置回调函数来报告传感器数据。 1053 int32_t ret = OH_SensorSubscriber_SetCallback(g_user, SensorDataCallbackImpl); 1054 if (ret != SENSOR_SUCCESS) { 1055 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriber_SetCallback failed"); 1056 return nullptr; 1057 } 1058 // 创建Sensor_SubscriptionId实例。 1059 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 1060 // 设置传感器类型,示例中设置的是SENSOR_TYPE_ACCELEROMETER类型,需开通ohos.permission.ACCELEROMETER权限 1061 // 参考传感器开发指导中 开发步骤第2点配置加速度传感器权限。 1062 ret = OH_SensorSubscriptionId_SetType(id, SENSOR_ID); 1063 if (ret != SENSOR_SUCCESS) { 1064 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionId_SetType failed"); 1065 return nullptr; 1066 } 1067 // 创建Sensor_SubscriptionAttribute实例。 1068 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 1069 // 设置传感器数据报告间隔。 1070 ret = OH_SensorSubscriptionAttribute_SetSamplingInterval(attr, SENSOR_SAMPLE_PERIOD); 1071 if (ret != SENSOR_SUCCESS) { 1072 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionAttribute_SetSamplingInterval failed"); 1073 return nullptr; 1074 } 1075 // 订阅传感器数据。 1076 ret = OH_Sensor_Subscribe(id, attr, g_user); 1077 if (ret != SENSOR_SUCCESS) { 1078 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe failed"); 1079 return nullptr; 1080 } 1081 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Subscribe successful"); 1082 std::this_thread::sleep_for(std::chrono::milliseconds(SLEEP_TIME_MS)); 1083 // 取消订阅传感器数据。 1084 ret = OH_Sensor_Unsubscribe(id, g_user); 1085 if (ret != SENSOR_SUCCESS) { 1086 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe failed"); 1087 return nullptr; 1088 } 1089 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_Sensor_Unsubscribe successful"); 1090 if (id != nullptr) { 1091 // 销毁Sensor_SubscriptionId实例。 1092 OH_Sensor_DestroySubscriptionId(id); 1093 } 1094 if (attr != nullptr) { 1095 // 销毁Sensor_SubscriptionAttribute实例。 1096 OH_Sensor_DestroySubscriptionAttribute(attr); 1097 } 1098 if (g_user != nullptr) { 1099 // 销毁Sensor_Subscriber实例并回收内存。 1100 OH_Sensor_DestroySubscriber(g_user); 1101 g_user = nullptr; 1102 } 1103 return nullptr; 1104 } 1105 ``` 1106 1107### OH_SensorEvent_GetTimestamp() 1108 1109``` 1110int32_t OH_SensorEvent_GetTimestamp(Sensor_Event* sensorEvent, int64_t *timestamp) 1111``` 1112**描述**: 1113 1114获取传感器数据的时间戳。 1115 1116**起始版本**:11 1117 1118**参数**: 1119 1120| 名称 | 描述 | 1121| -------- | -------- | 1122| sensorEvent | 指向传感器数据信息的指针。 | 1123| timestamp | 时间戳指针。 | 1124 1125**返回**: 1126 1127如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1128 1129 1130### OH_SensorEvent_GetType() 1131 1132``` 1133int32_t OH_SensorEvent_GetType(Sensor_Event* sensorEvent, Sensor_Type *sensorType) 1134``` 1135**描述**: 1136 1137获取传感器类型。 1138 1139**起始版本**:11 1140 1141**参数**: 1142 1143| 名称 | 描述 | 1144| -------- | -------- | 1145| sensorEvent | 指向传感器数据信息的指针。 | 1146| sensorType | 指向传感器类型的指针。 | 1147 1148**返回**: 1149 1150如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1151 1152 1153### OH_SensorInfo_GetMaxSamplingInterval() 1154 1155``` 1156int32_t OH_SensorInfo_GetMaxSamplingInterval(Sensor_Info* sensor, int64_t *maxSamplingInterval) 1157``` 1158**描述**: 1159 1160获取传感器的最大数据上报间隔时间。 1161 1162**起始版本**:11 1163 1164**参数**: 1165 1166| 名称 | 描述 | 1167| -------- | -------- | 1168| sensor | 指向传感器信息的指针。 | 1169| maxSamplingInterval | 指向最大数据报告间隔的指针,单位为纳秒。 | 1170 1171**返回**: 1172 1173如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1174 1175 1176### OH_SensorInfo_GetMinSamplingInterval() 1177 1178``` 1179int32_t OH_SensorInfo_GetMinSamplingInterval(Sensor_Info* sensor, int64_t *minSamplingInterval) 1180``` 1181**描述**: 1182 1183获取传感器的最小数据上报间隔。 1184 1185**起始版本**:11 1186 1187**参数**: 1188 1189| 名称 | 描述 | 1190| -------- | -------- | 1191| sensor | 指向传感器信息的指针。 | 1192| minSamplingInterval | 指向最小数据报告间隔的指针,以纳秒为单位。 | 1193 1194**返回**: 1195 1196如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1197 1198 1199### OH_SensorInfo_GetName() 1200 1201``` 1202int32_t OH_SensorInfo_GetName (Sensor_Info* sensor, char *sensorName, uint32_t *length) 1203``` 1204**描述**: 1205 1206获取传感器名称。 1207 1208**起始版本**:11 1209 1210**参数**: 1211 1212| 名称 | 描述 | 1213| -------- | -------- | 1214| sensor | 指向传感器信息的指针。 | 1215| sensorName | 指向传感器名称的指针。 | 1216| length | 指向长度的指针,以字节为单位。 | 1217 1218**返回**: 1219 1220如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1221 1222 1223### OH_SensorInfo_GetResolution() 1224 1225``` 1226int32_t OH_SensorInfo_GetResolution(Sensor_Info* sensor, float *resolution) 1227``` 1228**描述**: 1229 1230获取传感器分辨率。 1231 1232**起始版本**:11 1233 1234**参数**: 1235 1236| 名称 | 描述 | 1237| -------- | -------- | 1238| sensor | 指向传感器信息的指针。 | 1239| resolution | 指向传感器分辨率的指针。 | 1240 1241**返回**: 1242 1243如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1244 1245 1246### OH_SensorInfo_GetType() 1247 1248``` 1249int32_t OH_SensorInfo_GetType(Sensor_Info* sensor, Sensor_Type *sensorType) 1250``` 1251**描述**: 1252 1253获取传感器类型。 1254 1255**起始版本**: 11 1256 1257**参数**: 1258 1259| 名称 | 描述 | 1260| -------- | -------- | 1261| sensor | 指向传感器信息的指针。 | 1262| sensorType | 指向传感器类型的指针。 | 1263 1264**返回**: 1265 1266如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1267 1268 1269### OH_SensorInfo_GetVendorName() 1270 1271``` 1272int32_t OH_SensorInfo_GetVendorName(Sensor_Info* sensor, char *vendorName, uint32_t *length) 1273``` 1274**描述**: 1275 1276获取传感器的厂商名称。 1277 1278**起始版本**:11 1279 1280**参数**: 1281 1282| 名称 | 描述 | 1283| -------- | -------- | 1284| sensor | 指向传感器信息的指针。 | 1285| vendorName | 指向供应商名称的指针。 | 1286| length | 指向长度的指针,以字节为单位。 | 1287 1288**返回**: 1289 1290如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1291 1292 1293### OH_SensorSubscriber_GetCallback() 1294 1295``` 1296int32_t OH_SensorSubscriber_GetCallback(Sensor_Subscriber* subscriber, Sensor_EventCallback *callback) 1297``` 1298**描述**: 1299 1300获取用于上报传感器数据的回调函数。 1301 1302**起始版本**:11 1303 1304**参数**: 1305 1306| 名称 | 描述 | 1307| -------- | -------- | 1308| subscriber | 指向传感器订阅者信息的指针。 | 1309| callback | 指向回调函数的指针。 | 1310 1311**返回**: 1312 1313如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1314 1315 1316### OH_SensorSubscriber_SetCallback() 1317 1318``` 1319int32_t OH_SensorSubscriber_SetCallback (Sensor_Subscriber* subscriber, const Sensor_EventCallback callback ) 1320``` 1321**描述**: 1322 1323设置一个回调函数来上报传感器数据。 1324 1325**起始版本**:11 1326 1327**参数**: 1328 1329| 名称 | 描述 | 1330| -------- | -------- | 1331| subscriber | 指向传感器订阅者信息的指针。 | 1332| callback | 设置回调函数。 | 1333 1334**返回**: 1335 1336如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1337 1338**示例**: 1339 1340详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 1341 1342 ```c 1343 #include "sensors/oh_sensor.h" 1344 #include "napi/native_api.h" 1345 #include "hilog/log.h" 1346 1347 const int SENSOR_LOG_DOMAIN = 0xD002700; 1348 const char *TAG = "[Sensor]"; 1349 constexpr int64_t INVALID_VALUE = -1; 1350 1351 void SensorDataCallbackImpl(Sensor_Event *event) { 1352 if (event == nullptr) { 1353 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "event is null"); 1354 return; 1355 } 1356 int64_t timestamp = INVALID_VALUE; 1357 // 获取传感器数据的时间戳。 1358 int32_t ret = OH_SensorEvent_GetTimestamp(event, ×tamp); 1359 if (ret != SENSOR_SUCCESS) { 1360 return; 1361 } 1362 Sensor_Type sensorType; 1363 // 获取传感器类型。 1364 ret = OH_SensorEvent_GetType(event, &sensorType); 1365 if (ret != SENSOR_SUCCESS) { 1366 return; 1367 } 1368 Sensor_Accuracy accuracy = SENSOR_ACCURACY_UNRELIABLE; 1369 // 获取传感器数据的精度。 1370 ret = OH_SensorEvent_GetAccuracy(event, &accuracy); 1371 if (ret != SENSOR_SUCCESS) { 1372 return; 1373 } 1374 float *data = nullptr; 1375 uint32_t length = 0; 1376 // 获取传感器数据。 1377 ret = OH_SensorEvent_GetData(event, &data, &length); 1378 if (ret != SENSOR_SUCCESS) { 1379 return; 1380 } 1381 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "sensorType:%{public}d, dataLen:%{public}d, accuracy:%{public}d", sensorType, length, accuracy); 1382 for (uint32_t i = 0; i < length; ++i) { 1383 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "data[%{public}d]:%{public}f", i, data[i]); 1384 } 1385 } 1386 1387 static napi_value SensorSubscriberSetCallback(napi_env env, napi_callback_info info) { 1388 // 创建Sensor_Subscriber实例。 1389 Sensor_Subscriber *subscriberTemp = OH_Sensor_CreateSubscriber(); 1390 int32_t ret = OH_SensorSubscriber_SetCallback(subscriberTemp, SensorDataCallbackImpl); 1391 if (ret != SENSOR_SUCCESS) { 1392 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriber_SetCallback failed"); 1393 } else { 1394 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriber_SetCallback successful"); 1395 } 1396 // 销毁Sensor_Subscriber实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 1397 if (subscriberTemp != nullptr) { 1398 OH_Sensor_DestroySubscriber(subscriberTemp); 1399 } 1400 napi_value result; 1401 napi_create_int32(env, ret, &result); 1402 return result; 1403 } 1404 ``` 1405 1406### OH_SensorSubscriptionAttribute_GetSamplingInterval() 1407 1408``` 1409int32_t OH_SensorSubscriptionAttribute_GetSamplingInterval (Sensor_SubscriptionAttribute * attribute, int64_t * samplingInterval ) 1410``` 1411**描述**: 1412 1413获取传感器数据上报间隔。 1414 1415**起始版本**:11 1416 1417**参数**: 1418 1419| 名称 | 描述 | 1420| -------- | -------- | 1421| attribute | 指向传感器订阅属性的指针。 | 1422| samplingInterval | 指向数据报告间隔的指针,以纳秒为单位。 | 1423 1424**返回**: 1425 1426如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1427 1428 1429### OH_SensorSubscriptionAttribute_SetSamplingInterval() 1430 1431``` 1432int32_t OH_SensorSubscriptionAttribute_SetSamplingInterval(Sensor_SubscriptionAttribute* attribute, const int64_t samplingInterval) 1433``` 1434**描述**: 1435 1436设置传感器数据上报间隔。 1437 1438**起始版本**:11 1439 1440**参数**: 1441 1442| 名称 | 描述 | 1443| -------- | -------- | 1444| attribute | 指向传感器订阅属性的指针。 | 1445| samplingInterval | 要设置的数据报告间隔,以纳秒为单位。 | 1446 1447**返回**: 1448 1449如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1450 1451**示例**: 1452 1453详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 1454 1455 ```c 1456 #include "sensors/oh_sensor.h" 1457 #include "napi/native_api.h" 1458 #include "hilog/log.h" 1459 1460 const int SENSOR_LOG_DOMAIN = 0xD002700; 1461 const char *TAG = "[Sensor]"; 1462 1463 static napi_value SensorSubscriptionAttributeSetSamplingInterval(napi_env env, napi_callback_info info) { 1464 // 创建Sensor_SubscriptionAttribute实例。 1465 Sensor_SubscriptionAttribute *attr = OH_Sensor_CreateSubscriptionAttribute(); 1466 int64_t sensorSamplePeriod = 200000000; 1467 int32_t ret = OH_SensorSubscriptionAttribute_SetSamplingInterval(attr, sensorSamplePeriod); 1468 if (ret != SENSOR_SUCCESS) { 1469 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionAttribute_SetSamplingInterval failed"); 1470 } else { 1471 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionAttribute_SetSamplingInterval successful"); 1472 } 1473 // 销毁Sensor_SubscriptionAttribute实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 1474 if (attr != nullptr) { 1475 OH_Sensor_DestroySubscriptionAttribute(attr); 1476 } 1477 napi_value result; 1478 napi_create_int32(env, ret, &result); 1479 return result; 1480 } 1481 ``` 1482 1483### OH_SensorSubscriptionId_GetType() 1484 1485``` 1486int32_t OH_SensorSubscriptionId_GetType(Sensor_SubscriptionId* id, Sensor_Type *sensorType) 1487``` 1488**描述**: 1489 1490获取传感器类型。 1491 1492**起始版本**:11 1493 1494**参数**: 1495 1496| 名称 | 描述 | 1497| -------- | -------- | 1498| id | 指向传感器订阅ID的指针。 | 1499| sensorType | 指向传感器类型的指针。 | 1500 1501**返回**: 1502 1503如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1504 1505 1506### OH_SensorSubscriptionId_SetType() 1507 1508``` 1509int32_t OH_SensorSubscriptionId_SetType(Sensor_SubscriptionId* id, const Sensor_Type sensorType) 1510``` 1511**描述**: 1512 1513设置传感器类型。 1514 1515**起始版本**:11 1516 1517**参数**: 1518 1519| 名称 | 描述 | 1520| -------- | -------- | 1521| id | 指向传感器订阅ID的指针。 | 1522| sensorType | 要设置的传感器类型。 | 1523 1524**返回**: 1525 1526如果操作成功返回**SENSOR_SUCCESS**;否则返回 [Sensor_Result](#sensor_result) 中定义的错误代码。 1527 1528**示例**: 1529 1530详细的开发步骤请参考[传感器开发指导](../../device/sensor/sensor-guidelines-capi.md)。 1531 1532 ```c 1533 #include "sensors/oh_sensor.h" 1534 #include "napi/native_api.h" 1535 #include "hilog/log.h" 1536 1537 const int SENSOR_LOG_DOMAIN = 0xD002700; 1538 const char *TAG = "[Sensor]"; 1539 1540 static napi_value SensorSubscriptionIdSetType(napi_env env, napi_callback_info info) { 1541 // 创建Sensor_SubscriptionId实例。 1542 Sensor_SubscriptionId *id = OH_Sensor_CreateSubscriptionId(); 1543 Sensor_Type sensorId { SENSOR_TYPE_ACCELEROMETER }; 1544 int32_t ret = OH_SensorSubscriptionId_SetType(id, sensorId); 1545 if (ret != SENSOR_SUCCESS) { 1546 OH_LOG_Print(LOG_APP, LOG_ERROR, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionId_SetType failed"); 1547 } else { 1548 OH_LOG_Print(LOG_APP, LOG_INFO, SENSOR_LOG_DOMAIN, TAG, "OH_SensorSubscriptionId_SetType successful"); 1549 } 1550 // 销毁Sensor_SubscriptionId实例:在实际应用中,创建的实例会被用于后续操作,在不再使用时销毁 1551 if (id != nullptr) { 1552 OH_Sensor_DestroySubscriptionId(id); 1553 } 1554 napi_value result; 1555 napi_create_int32(env, ret, &result); 1556 return result; 1557 } 1558 ```