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

使用Flutter的app_usage包获取应用使用数据为何返回空列表?

应用使用数据获取为空的解决方案

核心问题

你的代码存在两个关键问题:未主动请求必要权限,以及缺少平台权限配置,导致无法获取应用使用统计数据。

解决步骤

1. 补充权限请求逻辑

修改getUsageStats方法,先申请权限,确认授权后再获取数据:

import 'dart:io'; // 导入Platform类用于判断平台
// ... 保留原有其他导入代码

void getUsageStats() async {
  PermissionStatus status;
  // 根据平台请求对应权限
  if (Platform.isAndroid) {
    status = await Permission.usageStats.request();
  } else if (Platform.isIOS) {
    status = await Permission.appTrackingTransparency.request();
  } else {
    print("当前平台不支持应用使用统计");
    return;
  }

  if (status.isGranted) {
    try {
      DateTime endDate = DateTime.now();
      DateTime startDate = endDate.subtract(const Duration(days: 10));
      List<AppUsageInfo> infoList = await AppUsage().getAppUsage(startDate, endDate);
      print(infoList);
      setState(() => _infos = infoList);
    } on AppUsageException catch (exception) {
      print(exception);
    }
  } else {
    print("权限被拒绝,无法获取应用使用数据");
    // 若权限被永久拒绝,引导用户跳转到应用设置页开启
    if (status.isPermanentlyDenied) {
      await openAppSettings();
    }
  }
}

2. 配置Android平台权限

在android/app/src/main/AndroidManifest.xml中添加以下权限:

<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.INTERNET" />

注意:PACKAGE_USAGE_STATS是系统保护权限,即使代码申请后,用户仍需手动在设置 > 应用 > 你的应用 > 权限 > 使用情况访问权限中开启。

3. 配置iOS平台权限

在ios/Runner/Info.plist中添加权限描述:

<key>NSUserTrackingUsageDescription</key>
<string>需要获取您的应用使用数据,用于统计各应用屏幕使用时长</string>

iOS 12及以上版本才支持应用使用统计功能。

验证逻辑

点击悬浮按钮后,先确认权限请求弹窗是否弹出,授权后查看控制台输出的infoList,此时应该能获取到应用名称和使用时长数据。

内容的提问来源于stack exchange,提问作者a.soltan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:55:16