OpenHarmony设备使用信息统计

170 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

OpenHarmony设备使用信息统计

背景

设备使用信息统计可以更好的了解大家的使用习惯,今天我们就来了解以下设备使用信息如何统计

概述

设备使用信息统计,包括app usage、notification usage、system usage等使用统计,目前只支持app usage使用统计。应用使用信息统计,用于保存和查询应用使用详情(app usage)、事件日志数据(event log)、应用分组(bundle group)情况。部件缓存的应用记录(使用历史统计和使用事件记录)会在事件上报后30分钟内刷新到数据库持久化保存。

设备使用信息统计功能说明

设备使用信息统计接口众多,目前只支持app usage使用统计,接下来介绍下应用使用详情(app usage)的接口逻辑。

  • 应用使用统计信息落盘时机

    1. 每隔30分钟触发一次刷新。
    2. 系统时间变更触发一次刷新。
    3. 下一天开始触发一次刷新。
  • 应用查询接口

    1. 根据起止时间查询所有应用的事件集合。
    2. 根据起止时间查询应用的使用时长。
    3. 根据起止时间查询当前应用的事件集合。
    4. 根据interval(日、周、月、年)类型和起止时间查询应用的使用时长。
    5. 查询调用者应用的优先级群组。
    6. 判断指定应用当前是否是空闲状态。
    7. 查询FA使用记录。返回数量最大不超过maxNum设置的值,FA使用记录由近及远排序,maxNum最大为1000,若不填写maxNum参数,则maxNum默认为1000。
    8. 根据起止时间查询应用通知次数。
    9. 根据起止时间查询系统事件(休眠、唤醒、解锁、锁屏)统计信息。
    10. 查询调用者应用或指定应用的优先级群组。
  • 设置接口

    给应用名称为bundleName的应用分组设置为newGroup。

  • 注册接口

    注册应用分组变化回调监听,当应用分组发生变化,会给所有已注册的应用返回变化信息。

  • 解除注册接口

    解除注册应用分组变化回调监听。

设备使用信息统计使用权限

  • 设备使用信息统计的queryBundleActiveStates、queryBundleStateInfos、queryBundleStateInfoByInterval、queryBundleActiveEventStates、queryAppNotificationNumber、queryAppUsagePriorityGroup(bundleName?)、setBundleGroup、registerGroupCallBack、unRegisterGroupCallBack接口为系统api,调用前需要申请ohos.permission.BUNDLE_ACTIVE_INFO权限。
  • 设备使用信息统计的queryCurrentBundleActiveStates、queryAppUsagePriorityGroup()、isIdleState(三方应用只能查询自身的空闲状态)接口为三方api,调用时不需要申请权限。

使用

注册相关接口包导入:

import stats from '@ohos.bundleState';

在config.json文件中配置设备使用信息统计权限。通过指定起始和结束时间查询所有应用的事件集合,config.json中需要配置权限:ohos.permission.BUNDLE_ACTIVE_INFO。

"module": {
    "package": "com.example.deviceUsageStatistics",
    ...,
    "reqPermissions": [
        {
            "name": "ohos.permission.BUNDLE_ACTIVE_INFO"
        }
    ]
}

通过指定起始和结束时间查询所有应用的事件集合

import stats from '@ohos.bundleState'// 异步方法promise方式
stats.queryBundleActiveStates(0, 20000000000000).then(res => {
    console.log('BUNDLE_ACTIVE queryBundleActiveStates promise success.');
    for (let i = 0; i < res.length; i++) {
        console.log('BUNDLE_ACTIVE queryBundleActiveStates promise number : ' + (i + 1));
        console.log('BUNDLE_ACTIVE queryBundleActiveStates promise result ' + JSON.stringify(res[i]));
    }
}).catch(err => {
    console.log('BUNDLE_ACTIVE queryBundleActiveStates promise failed, because: ' + err.code);
});
​
// 异步方法callback方式
stats.queryBundleActiveStates(0, 20000000000000, (err, res) => {
    if (err) {
        console.log('BUNDLE_ACTIVE queryBundleActiveStates callback failed, because: ' + err.code);
    } else {
        console.log('BUNDLE_ACTIVE queryBundleActiveStates callback success.');
        for (let i = 0; i < res.length; i++) {
            console.log('BUNDLE_ACTIVE queryBundleActiveStates callback number : ' + (i + 1));
            console.log('BUNDLE_ACTIVE queryBundleActiveStates callback result ' + JSON.stringify(res[i]));
        }
    }
});

通过指定起始和结束时间查询应用使用时长统计信息

import stats from '@ohos.bundleState'// 异步方法promise方式
stats.queryBundleStateInfos(0, 20000000000000).then(res => {
    console.log('BUNDLE_ACTIVE queryBundleStateInfos promise success.');
    let i = 1;
    for (let key in res){
        console.log('BUNDLE_ACTIVE queryBundleStateInfos promise number : ' + i);
        console.log('BUNDLE_ACTIVE queryBundleStateInfos promise result ' + JSON.stringify(res[key]));
        i++;
    }
}).catch(err => {
    console.log('BUNDLE_ACTIVE queryBundleStateInfos promise failed, because: ' + err.code);
});
​
// 异步方法callback方式
stats.queryBundleStateInfos(0, 20000000000000, (err, res) => {
    if (err) {
        console.log('BUNDLE_ACTIVE queryBundleStateInfos callback failed, because: ' + err.code);
    } else {
        console.log('BUNDLE_ACTIVE queryBundleStateInfos callback success.');
        let i = 1;
        for(let key in res){
            console.log('BUNDLE_ACTIVE queryBundleStateInfos callback number : ' + i);
            console.log('BUNDLE_ACTIVE queryBundleStateInfos callback result ' + JSON.stringify(res[key]));
            i++;
        }
    }
});

\