You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ionic 3安卓应用中获取其他应用的启动与结束时间?

Ionic 3安卓应用获取其他应用使用时间的实现方案

安卓系统本身提供了对应的能力实现这个需求,核心依赖系统自带的UsageStatsManager API,Ionic 3场景下可以通过Cordova插件封装调用,具体方案如下:

1 系统权限要求

首先需要申请特殊的应用使用统计权限,普通的动态申请无法生效:

  • 需在AndroidManifest.xml中添加权限声明:android.permission.PACKAGE_USAGE_STATS
  • 首次启动应用时要引导用户手动跳转至系统「应用使用情况访问权限」页,给你的应用开启权限
  • 适配安卓12及以上系统还需要额外添加权限:android.permission.QUERY_ALL_PACKAGES,否则无法获取所有应用的包名信息

2 核心API说明

UsageStatsManager是安卓5.0之后开放的系统级API,专门用于统计应用使用情况,你需要的字段都可以通过这个API获取:

  • queryUsageStats(时间区间类型, 开始时间, 结束时间):返回指定时间范围内所有应用的使用统计列表
  • 每个统计项的getFirstTimeStamp()返回对应应用在查询区间内首次进入前台的时间(即你需要的启动时间)
  • 每个统计项的getLastTimeStamp()返回对应应用在查询区间内最后一次离开前台的时间(即你需要的结束时间)
  • 额外还可以拿到getTotalTimeInForeground()获取应用在区间内的总前台使用时长

3 Ionic 3适配方案

Ionic 3基于Cordova框架,你可以直接用现成的Cordova插件封装调用,也可以自己开发自定义插件:

  • 方案一:使用开源的cordova-plugin-usage-stats插件,安装后直接通过全局window.UsageStats对象调用相关方法,无需自己写原生代码
  • 方案二:自定义Cordova插件,自己封装UsageStatsManager的调用逻辑,根据你的需求定制返回的字段和查询逻辑,灵活度更高

4 代码示例

4.1 Ionic前端调用示例

// 声明全局插件对象
declare let window: any;

// 先检查权限
checkUsagePermission() {
  window.UsageStats.hasPermission((isGranted: boolean) => {
    if (!isGranted) {
      // 跳转权限设置页引导用户授权
      window.UsageStats.openPermissionSetting();
      return;
    }
    // 查询过去24小时的应用使用数据
    const endTime = Date.now();
    const startTime = endTime - 24 * 60 * 60 * 1000;
    window.UsageStats.queryUsageStats(startTime, endTime, (statsList: any[]) => {
      statsList.forEach(appStat => {
        console.log('应用包名:', appStat.packageName);
        console.log('启动时间:', new Date(appStat.firstTimeStamp));
        console.log('结束时间:', new Date(appStat.lastTimeStamp));
        console.log('总前台时长:', appStat.totalTimeInForeground);
      });
    });
  });
}

4.2 安卓原生逻辑参考(自定义插件时使用)

UsageStatsManager usageStatsManager = (UsageStatsManager) getSystemService(Context.USAGE_STATS_SERVICE);
long endTime = System.currentTimeMillis();
long startTime = endTime - 1000 * 60 * 60 * 24;
List<UsageStats> usageStatsList = usageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, startTime, endTime);

for (UsageStats stat : usageStatsList) {
    // 过滤掉系统应用或者使用时长为0的无效数据
    if (stat.getTotalTimeInForeground() <= 0) continue;
    String pkgName = stat.getPackageName();
    long appStart = stat.getFirstTimeStamp();
    long appEnd = stat.getLastTimeStamp();
    // 把数据返回给JS层
}

5 注意事项

  • 仅支持安卓5.0及以上系统,更低版本安卓没有开放对应的能力,无法实现需求
  • 如果用户拒绝授予使用统计权限,你完全无法获取其他应用的使用数据,需要做好无权限的降级交互
  • 获取的用户应用使用数据属于敏感隐私数据,仅可用于用户明确授权的个人行为分析场景,避免违反隐私合规要求

内容的提问来源于stack exchange,提问作者Akash B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 23:51:02