• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;ActivityResponse&gt;): void | 订阅设备状态,结果通过callback返回。 |
43| once(activity: ActivityType, callback: Callback&lt;ActivityResponse&gt;): void | 查询设备状态,结果通过callback返回。 |
44| off(activity: ActivityType, event: ActivityEvent, callback?: Callback&lt;ActivityResponse&gt;): 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