1# 设备使用信息统计 2 3本模块提供设备使用信息统计能力。 4 5设备使用信息统计,系统应用可调用接口实现如下功能: 6 7- 查询设备上各应用在不同时间段的使用时长、各应用的事件(前台、后台、长时任务开始、长时任务结束)信息及各应用的通知次数信息。 8- 查询系统事件(休眠、唤醒、解锁、锁屏)统计信息。 9- 查询应用分组信息(指定应用和自身应用)。 10- 查询应用空闲状态(指定应用和自身应用)。 11- 设置应用分组信息(指定应用)。 12- 注册和解除注册应用分组变化监听。 13 14三方应用可调用接口实现如下功能: 15 16- 查询应用空闲状态(仅限自身应用)。 17- 查询应用分组信息(仅限自身应用)。 18- 查询应用事件(仅限自身应用)。 19 20> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:** 21> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 22 23 24## 导入模块 25 26``` 27import bundleState from '@ohos.bundleState' 28``` 29 30## bundleState.isIdleState 31 32isIdleState(bundleName: string, callback: AsyncCallback<boolean>): void 33 34判断指定bundleName的应用当前是否是空闲状态,使用Callback形式返回。 35 36**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.AppGroup 37 38**参数**: 39 40| 参数名 | 类型 | 必填 | 说明 | 41| -------- | -------- | -------- | -------- | 42| bundleName | string | 是 | 应用的bundleName。| 43| callback | AsyncCallback<boolean> | 是 | 指定的callback回调方法。如果指定的bundleName有效,则返回指定bundleName的应用当前是否是空闲状态;否则返回null。 | 44 45**示例**: 46 47 ``` 48 bundleState.isIdleState("com.ohos.camera", (err, res) => { 49 if (err) { 50 console.log('BUNDLE_ACTIVE isIdleState callback failed, because: ' + err.code); 51 } else { 52 console.log('BUNDLE_ACTIVE isIdleState callback succeeded, result: ' + JSON.stringify(res)); 53 } 54 }); 55 ``` 56 57## bundleState.isIdleState 58 59isIdleState(bundleName: string): Promise<boolean> 60 61判断指定bundleName的应用当前是否是空闲状态,使用Promise形式返回。 62 63**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.AppGroup 64 65**参数**: 66 67| 参数名 | 类型 | 必填 | 说明 | 68| -------- | -------- | -------- | -------- | 69| bundleName | string | 是 | 应用的bundleName。| 70 71**返回值**: 72 73| 类型 | 说明 | 74| -------- | -------- | 75| Promise<boolean> | 指定的Promise回调方法。如果指定的bundleName有效,则返回指定bundleName的应用当前是否是空闲状态;否则返回null。 | 76 77**示例**: 78 79 ``` 80 bundleState.isIdleState("com.ohos.camera").then(res => { 81 console.log('BUNDLE_ACTIVE isIdleState promise succeeded, result: ' + JSON.stringify(res)); 82 }).catch(err => { 83 console.log('BUNDLE_ACTIVE isIdleState promise failed, because: ' + err.code); 84 }); 85 ``` 86 87## bundleState.queryAppUsagePriorityGroup 88 89queryAppUsagePriorityGroup(callback: AsyncCallback<number>): void 90 91查询(返回)当前调用者应用的使用优先级群组,使用Callback形式返回。 92 93**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.AppGroup 94 95**参数**: 96 97| 参数名 | 类型 | 必填 | 说明 | 98| -------- | -------- | -------- | -------- | 99| callback | AsyncCallback<number> | 是 | 指定的callback回调方法。返回当前调用者应用的使用优先级群组。| 100 101**示例**: 102 103 ``` 104 bundleState.queryAppUsagePriorityGroup((err, res) => { 105 if (err) { 106 console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup callback failed. because: ' + err.code); 107 } else { 108 console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup callback succeeded. result: ' + JSON.stringify(res)); 109 } 110 }); 111 ``` 112 113## bundleState.queryAppUsagePriorityGroup 114 115queryAppUsagePriorityGroup(): Promise<number> 116 117查询(返回)当前调用者应用的使用优先级群组,使用Promise形式返回。 118 119**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.AppGroup 120 121**返回值**: 122 123| 类型 | 说明 | 124| -------- | -------- | 125| Promise<number> | 指定的Promise回调方法。查询(返回)当前调用者应用的使用优先级群组。| 126 127**示例**: 128 129 ``` 130 bundleState.queryAppUsagePriorityGroup().then(res => { 131 console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup promise succeeded. result: ' + JSON.stringify(res)); 132 }).catch(err => { 133 console.log('BUNDLE_ACTIVE queryAppUsagePriorityGroup promise failed. because: ' + err.code); 134 }); 135 ``` 136 137## bundleState.queryBundleStateInfos 138 139queryBundleStateInfos(begin: number, end: number, callback: AsyncCallback<BundleActiveInfoResponse>): void 140 141通过指定起始和结束时间查询应用使用时长统计信息,使用Callback形式返回。 142 143**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 144 145**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 146 147**系统API**:此接口为系统接口,三方应用不支持调用。 148 149**参数**: 150 151| 参数名 | 类型 | 必填 | 说明 | 152| -------- | -------- | -------- | -------- | 153| begin | number | 是 | 起始时间。| 154| end | number | 是 | 结束时间。| 155| callback | AsyncCallback<[BundleActiveInfoResponse](#bundleactiveinforesponse)> | 是 | 指定的callback回调方法。返回指定起始和结束时间内应用使用时长统计信息。| 156 157**示例**: 158 159 ``` 160 bundleState.queryBundleStateInfos(0, 20000000000000, (err, res) => { 161 if (err) { 162 console.log('BUNDLE_ACTIVE queryBundleStateInfos callback failed, because: ' + err.code); 163 } else { 164 console.log('BUNDLE_ACTIVE queryBundleStateInfos callback success.'); 165 let i = 1; 166 for (let key in res) { 167 console.log('BUNDLE_ACTIVE queryBundleStateInfos callback number : ' + i); 168 console.log('BUNDLE_ACTIVE queryBundleStateInfos callback result ' + JSON.stringify(res[key])); 169 i++; 170 } 171 } 172 }); 173 ``` 174 175## bundleState.queryBundleStateInfos 176 177queryBundleStateInfos(begin: number, end: number): Promise<BundleActiveInfoResponse> 178 179通过指定起始和结束时间查询应用使用时长统计信息,使用Promise形式返回。 180 181**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 182 183**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 184 185**系统API**:此接口为系统接口,三方应用不支持调用。 186 187**参数**: 188 189| 参数名 | 类型 | 必填 | 说明 | 190| -------- | -------- | -------- | -------- | 191| begin | number | 是 | 起始时间。| 192| end | number | 是 | 结束时间。| 193 194**返回值**: 195 196| 类型 | 说明 | 197| -------- | -------- | 198| Promise<[BundleActiveInfoResponse](#bundleactiveinforesponse)> | 指定的Promise回调方法。返回指定起始和结束时间内应用使用时长统计信息。| 199 200**示例**: 201 202 ``` 203 bundleState.queryBundleStateInfos(0, 20000000000000).then(res => { 204 console.log('BUNDLE_ACTIVE queryBundleStateInfos promise success.'); 205 let i = 1; 206 for (let key in res) { 207 console.log('BUNDLE_ACTIVE queryBundleStateInfos promise number : ' + i); 208 console.log('BUNDLE_ACTIVE queryBundleStateInfos promise result ' + JSON.stringify(res[key])); 209 i++; 210 } 211 }).catch(err => { 212 console.log('BUNDLE_ACTIVE queryBundleStateInfos promise failed, because: ' + err.code); 213 }); 214 ``` 215 216## bundleState.queryBundleStateInfoByInterval 217 218queryBundleStateInfoByInterval(byInterval: IntervalType, begin: number, end: number, callback: AsyncCallback<Array<BundleStateInfo>>): void 219 220通过指定时间段间隔(天、周、月、年)查询应用使用时长统计信息,使用Callback形式返回。 221 222**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 223 224**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 225 226**系统API**:此接口为系统接口,三方应用不支持调用。 227 228**参数**: 229 230| 参数名 | 类型 | 必填 | 说明 | 231| -------- | -------- | -------- | -------- | 232| byInterval | [IntervalType](#intervaltype) | 是 | 查询类型。| 233| begin | number | 是 | 起始时间。| 234| end | number | 是 | 结束时间。| 235| callback | AsyncCallback<Array<[BundleStateInfo](#bundlestateinfo)>> | 是 | 指定的callback回调方法。返回指定时间段间隔(天、周、月、年)查询应用使用时长统计信息。| 236 237**示例**: 238 239 ``` 240 bundleState.queryBundleStateInfoByInterval(0, 0, 20000000000000, (err, res) => { 241 if (err) { 242 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback failed, because: ' + err.code); 243 } else { 244 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback success.'); 245 for (let i = 0; i < res.length; i++) { 246 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback number : ' + (i + 1)); 247 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval callback result ' + JSON.stringify(res[i])); 248 } 249 } 250 }); 251 ``` 252 253## bundleState.queryBundleStateInfoByInterval 254 255queryBundleStateInfoByInterval(byInterval: IntervalType, begin: number, end: number): Promise<Array<BundleStateInfo>> 256 257通过指定时间段间隔(天、周、月、年)查询应用使用时长统计信息,使用Promise形式返回。 258 259**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 260 261**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 262 263**系统API**:此接口为系统接口,三方应用不支持调用。 264 265**参数**: 266 267| 参数名 | 类型 | 必填 | 说明 | 268| -------- | -------- | -------- | -------- | 269| byInterval | [IntervalType](#intervaltype) | 是 | 查询类型。| 270| begin | number | 是 | 起始时间。| 271| end | number | 是 | 结束时间。| 272 273**返回值**: 274 275| 类型 | 说明 | 276| -------- | -------- | 277| Promise<Array<[BundleStateInfo](#bundlestateinfo)>> | 指定的Promise回调方法。返回指定时间段间隔(天、周、月、年)查询应用使用时长统计信息。| 278 279**示例**: 280 281 ``` 282 bundleState.queryBundleStateInfoByInterval(0, 0, 20000000000000).then(res => { 283 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise success.'); 284 for (let i = 0; i < res.length; i++) { 285 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise number : ' + (i + 1)); 286 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise result ' + JSON.stringify(res[i])); 287 } 288 }).catch(err => { 289 console.log('BUNDLE_ACTIVE queryBundleStateInfoByInterval promise failed, because: ' + err.code); 290 }); 291 ``` 292 293## bundleState.queryBundleActiveStates 294 295queryBundleActiveStates(begin: number, end: number, callback: AsyncCallback<Array<BundleActiveState>>): void 296 297通过指定起始和结束时间查询所有应用的事件集合,使用Callback形式返回。 298 299**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 300 301**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 302 303**系统API**:此接口为系统接口,三方应用不支持调用。 304 305**参数**: 306 307| 参数名 | 类型 | 必填 | 说明 | 308| -------- | -------- | -------- | -------- | 309| begin | number | 是 | 起始时间。| 310| end | number | 是 | 结束时间。| 311| callback | AsyncCallback<Array<[BundleActiveState](#bundleactivestate)>> | 是 | 指定的callback回调方法。返回指定起始和结束时间查询所有应用的事件集合。| 312 313**示例**: 314 315 ``` 316 bundleState.queryBundleActiveStates(0, 20000000000000, (err, res) => { 317 if (err) { 318 console.log('BUNDLE_ACTIVE queryBundleActiveStates callback failed, because: ' + err.code); 319 } else { 320 console.log('BUNDLE_ACTIVE queryBundleActiveStates callback success.'); 321 for (let i = 0; i < res.length; i++) { 322 console.log('BUNDLE_ACTIVE queryBundleActiveStates callback number : ' + (i + 1)); 323 console.log('BUNDLE_ACTIVE queryBundleActiveStates callback result ' + JSON.stringify(res[i])); 324 } 325 } 326 }); 327 ``` 328 329## bundleState.queryBundleActiveStates 330 331queryBundleActiveStates(begin: number, end: number): Promise<Array<BundleActiveState>> 332 333通过指定起始和结束时间查询所有应用的事件集合,使用Promise形式返回。 334 335**需要权限**:ohos.permission.BUNDLE_ACTIVE_INFO 336 337**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 338 339**系统API**:此接口为系统接口,三方应用不支持调用。 340 341**参数**: 342 343| 参数名 | 类型 | 必填 | 说明 | 344| -------- | -------- | -------- | -------- | 345| begin | number | 是 | 起始时间。| 346| end | number | 是 | 结束时间。| 347 348**返回值**: 349 350| 类型 | 说明 | 351| -------- | -------- | 352| Promise<Array<[BundleActiveState](#bundleactivestate)>> | 指定的Promise回调方法。返回指定起始和结束时间查询所有应用的事件集合。| 353 354**示例**: 355 356 ``` 357 bundleState.queryBundleActiveStates(0, 20000000000000).then(res => { 358 console.log('BUNDLE_ACTIVE queryBundleActiveStates promise success.'); 359 for (let i = 0; i < res.length; i++) { 360 console.log('BUNDLE_ACTIVE queryBundleActiveStates promise number : ' + (i + 1)); 361 console.log('BUNDLE_ACTIVE queryBundleActiveStates promise result ' + JSON.stringify(res[i])); 362 } 363 }).catch(err => { 364 console.log('BUNDLE_ACTIVE queryBundleActiveStates promise failed, because: ' + err.code); 365 }); 366 ``` 367 368## bundleState.queryCurrentBundleActiveStates 369 370queryCurrentBundleActiveStates(begin: number, end: number, callback: AsyncCallback<Array<BundleActiveState>>): void 371 372通过指定起始和结束时间查询当前应用的事件集合,使用Callback形式返回。 373 374**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 375 376**参数**: 377 378| 参数名 | 类型 | 必填 | 说明 | 379| -------- | -------- | -------- | -------- | 380| begin | number | 是 | 起始时间。| 381| end | number | 是 | 结束时间。| 382| callback | AsyncCallback<Array<[BundleActiveState](#bundleactivestate)>> | 是 | 指定的callback回调方法。返回指定起始和结束时间查询当前应用的事件集合。| 383 384**示例**: 385 386 ``` 387 bundleState.queryCurrentBundleActiveStates(0, 20000000000000, (err, res) => { 388 if (err) { 389 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback failed, because: ' + err.code); 390 } else { 391 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback success.'); 392 for (let i = 0; i < res.length; i++) { 393 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback number : ' + (i + 1)); 394 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates callback result ' + JSON.stringify(res[i])); 395 } 396 } 397 }); 398 ``` 399 400## bundleState.queryCurrentBundleActiveStates 401 402queryCurrentBundleActiveStates(begin: number, end: number): Promise<Array<BundleActiveState>> 403 404通过指定起始和结束时间查询当前应用的事件集合,使用Promise形式返回。 405 406**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 407 408**参数**: 409 410| 参数名 | 类型 | 必填 | 说明 | 411| -------- | -------- | -------- | -------- | 412| begin | number | 是 | 起始时间。| 413| end | number | 是 | 结束时间。| 414 415**返回值**: 416 417| 类型 | 说明 | 418| -------- | -------- | 419| Promise<Array<[BundleActiveState](#bundleactivestate)>> | 指定的Promise回调方法。返回指定起始和结束时间查询当前应用的事件集合。| 420 421**示例**: 422 423 ``` 424 bundleState.queryCurrentBundleActiveStates(0, 20000000000000).then(res => { 425 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise success.'); 426 for (let i = 0; i < res.length; i++) { 427 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise number : ' + (i + 1)); 428 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise result ' + JSON.stringify(res[i])); 429 } 430 }).catch(err => { 431 console.log('BUNDLE_ACTIVE queryCurrentBundleActiveStates promise failed, because: ' + err.code); 432 }); 433 ``` 434 435## BundleStateInfo 436提供应用使用时长的具体信息。 437 438### 属性 439 440**系统能力**:以下各项对应的系统能力均为SystemCapability.ResourceSchedule.UsageStatistics.App 441 442| 参数名 | 类型 | 必填 | 说明 | 443| -------- | -------- | -------- | -------- | 444| bundleName | string | 是 | 应用包名。| 445| abilityPrevAccessTime | number | 是 | 应用最后一次使用的时间。| 446| abilityInFgTotalTime | number | 是 | 应用在前台使用的总时间。| 447| id | number | 否 | 用户id。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 448| abilityPrevSeenTime | number | 否 | 应用最后一次在前台可见的时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 449| abilitySeenTotalTime | number | 否 | 应用在前台可见的总时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 450| fgAbilityAccessTotalTime | number | 否 | 应用访问前台的总时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 451| fgAbilityPrevAccessTime | number | 否 | 应用最后一次访问前台的时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 452| infosBeginTime | number | 否 | BundleActiveInfo对象中第一条应用使用统计的记录时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 453| infosEndTime | number | 否 | BundleActiveInfo对象中最后一条应用使用统计的记录时间。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 454 455### merge 456 457merge(toMerge: BundleStateInfo): void 458 459合并相同包名的应用使用信息。 460 461**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 462 463**参数**: 464 465| 参数名 | 类型 | 必填 | 说明 | 466| -------- | -------- | -------- | -------- | 467| toMerge | [BundleStateInfo](#bundlestateinfo) | 是 | 相同包名的应用使用统计信息。| 468 469## BundleActiveState 470 471提供应用事件的具体信息。 472 473**系统能力**:以下各项对应的系统能力均为SystemCapability.ResourceSchedule.UsageStatistics.App 474 475| 参数名 | 类型 | 必填 | 说明 | 476| -------- | -------- | -------- | -------- | 477| bundleName | string | 是 | 应用包名。| 478| stateType | number | 是 | 应用事件类型。| 479| stateOccurredTime | number | 是 | 应用事件发生的时间戳。| 480| appUsagePriorityGroup | number | 否 | 应用程序的使用优先级组。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 481| indexOfLink | string | 否 | 快捷方式id。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 482| nameOfClass | string | 否 | 类名。<br>本接口在OpenHarmony 3.1 Release版本仅为接口定义,暂不支持使用。接口将在OpenHarmony 3.1 MR版本中提供使用支持。| 483 484## BundleActiveInfoResponse 485 486提供应用使用时长的具体信息。 487 488**系统能力**:SystemCapability.ResourceSchedule.UsageStatistics.App 489 490| 参数名 | 类型 | 必填 | 说明 | 491| -------- | -------- | -------- | -------- | 492| [key: string]: BundleStateInfo | [key: string]: [BundleStateInfo](#bundlestateinfo) | 是 | 不同应用的使用时长统计信息。| 493 494## IntervalType 495 496提供应用使用时长的查询类型。 497 498**系统能力**:以下各项对应的系统能力均为SystemCapability.ResourceSchedule.UsageStatistics.App 499 500|名称 |默认值 |说明| 501| -------- | -------- | -------- | 502| BY_OPTIMIZED | 0 | 表示系统自行判断最合适的查询类型(天、周、月、年)去查询指定时间段间隔的应用使用时长信息。| 503| BY_DAILY | 1 | 表示系统按照天去查询指定时间段间隔的应用使用时长信息。| 504| BY_WEEKLY | 2 | 表示系统按照周去查询指定时间段间隔的应用使用时长信息。| 505| BY_MONTHLY | 3 | 表示系统按照月去查询指定时间段间隔的应用使用时长信息。| 506| BY_ANNUALLY | 4 | 表示系统按照年去查询指定时间段间隔的应用使用时长信息。|