• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 设备使用信息统计
2
3## 场景介绍
4
5设备使用信息统计,包括app usage/notification usage/system usage等使用统计。例如应用使用信息统计,用于保存和查询应用使用详情(app usage)、事件日志数据(event log)、应用分组(bundle group)情况。
6部件缓存的应用记录(使用历史统计和使用事件记录)会在事件上报后30分钟内刷新到数据库持久化保存。
7
8## 接口说明
9注册相关接口包导入:
10```js
11import stats from '@ohos.bundleState';
12```
13
14**表1** 设备使用信息统计主要接口
15
16| 接口名 | 描述 |
17| -------- | -------- |
18| function queryBundleActiveStates(begin: number, end: number, callback: AsyncCallback<Array<BundleActiveState>>): void | 通过指定起始和结束时间查询所有应用的事件集合。 |
19| function queryBundleStateInfos(begin: number, end: number, callback: AsyncCallback<BundleActiveInfoResponse>): void | 通过指定起始和结束时间查询应用使用时长统计信息。 |
20| function queryCurrentBundleActiveStates(begin: number, end: number, callback: AsyncCallback<Array<BundleActiveState>>): void | 通过指定起始和结束时间查询当前应用的事件集合。 |
21| function queryBundleStateInfoByInterval(byInterval: IntervalType, begin: number, end: number, callback: AsyncCallback<Array<BundleStateInfo>>): void | 通过指定时间段间隔(天、周、月、年)查询应用使用时长统计信息。 |
22| function queryAppUsagePriorityGroup(callback: AsyncCallback<number>): void | 查询(返回)当前调用者应用的使用优先级群组。 |
23| function isIdleState(bundleName: string, callback: AsyncCallback<boolean>): void | 判断指定Bundle Name的应用当前是否是空闲状态。 |
24
25## 开发步骤
26
271. 在config.json文件中配置设备使用信息统计权限。
28
29    ```json
30    "module": {
31        "package": "com.example.deviceUsageStatistics",
32        ...,
33        "reqPermissions": [
34            {
35            "name": "ohos.permission.BUNDLE_ACTIVE_INFO"
36            }
37        ]
38    }
39    ```
40
412. 通过指定起始和结束时间查询所有应用的事件集合,config.json中需要配置权限:ohos.permission.BUNDLE_ACTIVE_INFO42
43    ```js
44    import stats from '@ohos.bundleState'
45
46    // 异步方法promise方式
47    stats.queryBundleActiveStates(0, 20000000000000).then(res => {
48        console.log('BUNDLE_ACTIVE queryBundleActiveStates promise success.');
49        for (let i = 0; i < res.length; i++) {
50            console.log('BUNDLE_ACTIVE queryBundleActiveStates promise number : ' + (i + 1));
51            console.log('BUNDLE_ACTIVE queryBundleActiveStates promise result ' + JSON.stringify(res[i]));
52        }
53    }).catch(err => {
54        console.log('BUNDLE_ACTIVE queryBundleActiveStates promise failed, because: ' + err.code);
55    });
56
57    // 异步方法callback方式
58    stats.queryBundleActiveStates(0, 20000000000000, (err, res) => {
59        if (err) {
60            console.log('BUNDLE_ACTIVE queryBundleActiveStates callback failed, because: ' + err.code);
61        } else {
62            console.log('BUNDLE_ACTIVE queryBundleActiveStates callback success.');
63            for (let i = 0; i < res.length; i++) {
64                console.log('BUNDLE_ACTIVE queryBundleActiveStates callback number : ' + (i + 1));
65                console.log('BUNDLE_ACTIVE queryBundleActiveStates callback result ' + JSON.stringify(res[i]));
66            }
67        }
68    });
69    ```
70
713. 通过指定起始和结束时间查询应用使用时长统计信息,config.json中需要配置权限:ohos.permission.BUNDLE_ACTIVE_INFO72
73    ```js
74    import stats from '@ohos.bundleState'
75
76    // 异步方法promise方式
77    stats.queryBundleStateInfos(0, 20000000000000).then(res => {
78        console.log('BUNDLE_ACTIVE queryBundleStateInfos promise success.');
79        let i = 1;
80        for (let key in res) {
81            console.log('BUNDLE_ACTIVE queryBundleStateInfos promise number : ' + i);
82            console.log('BUNDLE_ACTIVE queryBundleStateInfos promise result ' + JSON.stringify(res[key]));
83            i++;
84        }
85    }).catch(err => {
86        console.log('BUNDLE_ACTIVE queryBundleStateInfos promise failed, because: ' + err.code);
87    });
88
89    // 异步方法callback方式
90    stats.queryBundleStateInfos(0, 20000000000000, (err, res) => {
91        if (err) {
92            console.log('BUNDLE_ACTIVE queryBundleStateInfos callback failed, because: ' + err.code);
93        } else {
94            console.log('BUNDLE_ACTIVE queryBundleStateInfos callback success.');
95            let i = 1;
96            for (let key in res) {
97                console.log('BUNDLE_ACTIVE queryBundleStateInfos callback number : ' + i);
98                console.log('BUNDLE_ACTIVE queryBundleStateInfos callback result ' + JSON.stringify(res[key]));
99                i++;
100            }
101        }
102    });
103    ```
104
1054. 通过指定起始和结束时间查询当前应用的事件集合,config.json中不需要配置权限。
106
107    ```js
108    import stats from '@ohos.bundleState'
109
110    // 异步方法promise方式
111    stats.queryCurrentBundleActiveStates(0, 20000000000000).then(res => {
112        console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise success.');
113        for (let i = 0; i < res.length; i++) {
114            console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise number : ' + (i + 1));
115            console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise result ' + JSON.stringify(res[i]));
116        }
117    }).catch(err => {
118        console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise failed, because: ' + err.code);
119    });
120
121    // 异步方法callback方式
122    stats.queryCurrentBundleActiveStates(0, 20000000000000, (err, res) => {
123        if (err) {
124            console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback failed, because: ' + err.code);
125        } else {
126            console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback success.');
127            for (let i = 0; i < res.length; i++) {
128                console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback number : ' + (i + 1));
129                console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback result ' + JSON.stringify(res[i]));
130             }
131        }
132    });
133    ```
134
1355. 通过指定时间段间隔(天、周、月、年)查询应用使用时长统计信息,config.json中需要配置权限:ohos.permission.BUNDLE_ACTIVE_INFO136
137    ```js
138    import stats from '@ohos.bundleState'
139
140    // 异步方法promise方式
141    stats.queryBundleStateInfoByInterval(0, 0, 20000000000000).then(res => {
142        console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise success.');
143        for (let i = 0; i < res.length; i++) {
144            console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise number : ' + (i + 1));
145            console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise result ' + JSON.stringify(res[i]));
146        }
147    }).catch(err => {
148        console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise failed, because: ' + err.code);
149    });
150
151    // 异步方法callback方式
152    stats.queryBundleStateInfoByInterval(0, 0, 20000000000000, (err, res) => {
153        if (err) {
154            console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback failed, because: ' + err.code);
155        } else {
156            console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback success.');
157            for (let i = 0; i < res.length; i++) {
158                console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback number : ' + (i + 1));
159                console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback result ' + JSON.stringify(res[i]));
160            }
161        }
162    });
163    ```
164
1656. 查询(返回)当前调用者应用的使用优先级群组,config.json中不需要配置权限。
166
167    ```js
168    import stats from '@ohos.bundleState'
169
170    // 异步方法promise方式
171    stats.queryAppUsagePriorityGroup().then(res => {
172        console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup promise succeeded. result: ' + JSON.stringify(res));
173    }).catch(err => {
174        console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup promise failed. because: ' + err.code);
175    });
176
177    // 异步方法callback方式
178    stats.queryAppUsagePriorityGroup((err, res) => {
179        if (err) {
180            console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup callback failed. because: ' + err.code);
181        } else {
182            console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup callback succeeded. result: ' + JSON.stringify(res));
183        }
184    });
185    ```
186
1877. 判断指定Bundle Name的应用当前是否是空闲状态,config.json中不需要配置权限。
188
189    ```js
190    import stats from '@ohos.bundleState'
191
192    // 异步方法promise方式
193    stats.isIdleState("com.ohos.camera").then(res => {
194        console.log('BUNDLE_ACTIVE isIdleState promise succeeded, result: ' + JSON.stringify(res));
195    }).catch(err => {
196        console.log('BUNDLE_ACTIVE isIdleState promise failed, because: ' + err.code);
197    });
198
199    // 异步方法callback方式
200    stats.isIdleState("com.ohos.camera", (err, res) => {
201        if (err) {
202            console.log('BUNDLE_ACTIVE isIdleState callback failed, because: ' + err.code);
203        } else {
204            console.log('BUNDLE_ACTIVE isIdleState callback succeeded, result: ' + JSON.stringify(res));
205        }
206    });
207    ```
208## 相关实例
209针对设备使用信息统计,有以下相关实例可供参考:
210- [`DeviceUsageStatistics`:设备使用信息统计(eTS)(API8)(Full SDK)](https://gitee.com/openharmony/applications_app_samples/tree/samples_monthly_0730/device/DeviceUsageStatistics)