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_INFO。 42 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_INFO。 72 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_INFO。 136 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)