1# Stationary开发指导 2<!--Kit: Multimodal Awareness Kit--> 3<!--Subsystem: MultimodalAwareness--> 4<!--Owner: @dilligencer--> 5<!--Designer: @zou_ye--> 6<!--Tester: @judan--> 7<!--Adviser: @hu-zhiqiong--> 8 9 10## 场景介绍 11 12当应用需要获取当前设备状态时,可以调用Stationary模块,例如:需要判断当前设备处于绝对静止状态或者相对静止状态。 13 14详细的接口介绍请参考[Stationary接口](../../reference/apis-multimodalawareness-kit/js-apis-stationary.md)。 15 16## 设备状态类型参数说明 17 18| 名称 | 描述 | 19| -------- | -------- | 20| still | 绝对静止。 | 21| relativeStill | 相对静止。 | 22 23## 订阅设备状态事件参数说明 24 25| 变量 | 值 | 说明 | 26| ------------------------------ | ---- | ---------------------------------------- | 27| ENTER | 1 | 订阅进入事件。 | 28| EXIT | 2 | 订阅退出事件。 | 29| ENTER_EXIT | 3 | 订阅进入和退出事件。 | 30 31## 返回设备状态参数说明 32 33| 变量 | 值 | 说明 | 34| ------------------------------ | ---- | ---------------------------------------- | 35| ENTER | 1 | 返回进入状态。 | 36| EXIT | 2 | 返回退出状态。 | 37 38## 接口说明 39 40| 接口名 | 描述 | 41| ------------------------------------------------------------ | ------------------------------------------------------------ | 42| on(activity: ActivityType, event: ActivityEvent, reportLatencyNs: number, callback: Callback<ActivityResponse>): void | 订阅设备状态,结果通过callback返回。 | 43| once(activity: ActivityType, callback: Callback<ActivityResponse>): void | 查询设备状态,结果通过callback返回。 | 44| off(activity: ActivityType, event: ActivityEvent, callback?: Callback<ActivityResponse>): void | 取消订阅设备状态。 | 45 46## 约束与限制 47 48设备需要支持加速度传感器。 49目前只提供了算法框架,api接口测试框架的调用返回结果为:data={"type":3,"value":-1}; 50如需相对静止和绝对静止能力,则具体算法需要开发者自己在device_status/libs/src/algorithm实现,可参考案例如下: 51 52 ```ts 53 algoPara_.resultantAcc = 54 sqrt((algoPara_.x * algoPara_.x) + (algoPara_.y * algoPara_.y) + (algoPara_.z * algoPara_.z)); 55 if ((algoPara_.resultantAcc > RESULTANT_ACC_LOW_THRHD) && (algoPara_.resultantAcc < RESULTANT_ACC_UP_THRHD)) { 56 if (state_ == STILL) { 57 return; 58 } 59 counter_--; 60 if (counter_ == 0) { 61 counter_ = COUNTER_THRESHOLD; 62 UpdateStateAndReport(VALUE_ENTER, STILL, TYPE_ABSOLUTE_STILL); 63 } 64 } else { 65 counter_ = COUNTER_THRESHOLD; 66 if (state_ == UNSTILL) { 67 return; 68 } 69 UpdateStateAndReport(VALUE_EXIT, UNSTILL, TYPE_ABSOLUTE_STILL); 70 } 71 ``` 72 73## 开发步骤 74 751. 订阅绝对静止的进入事件,1秒上报一次。 76 77 ```ts 78 import { stationary } from '@kit.MultimodalAwarenessKit'; 79 import { BusinessError } from '@kit.BasicServicesKit'; 80 let reportLatencyNs = 1000000000; 81 try { 82 stationary.on('still', stationary.ActivityEvent.ENTER, reportLatencyNs, (data) => { 83 console.log('data='+ JSON.stringify(data)); 84 }) 85 } catch (error) { 86 let message = (error as BusinessError).message; 87 console.error('stationary on failed:' + message); 88 } 89 ``` 90 912. 查询绝对静止状态的进入事件。 92 93 ```ts 94 import { stationary } from '@kit.MultimodalAwarenessKit'; 95 import { BusinessError } from '@kit.BasicServicesKit'; 96 try { 97 stationary.once('still', (data) => { 98 console.log('data='+ JSON.stringify(data)); 99 }) 100 } catch (error) { 101 let message = (error as BusinessError).message; 102 console.error('stationary once failed:' + message); 103 } 104 ``` 105 1063. 取消订阅绝对静止状态的进入事件。 107 108 ```ts 109 import { stationary } from '@kit.MultimodalAwarenessKit'; 110 import { BusinessError } from '@kit.BasicServicesKit'; 111 try { 112 stationary.off('still', stationary.ActivityEvent.ENTER, (data) => { 113 console.log('data='+ JSON.stringify(data)); 114 }) 115 } catch (error) { 116 let message = (error as BusinessError).message; 117 console.error('stationary off failed:' + message); 118 } 119 ``` 120