使用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
相关产品推荐
相关产品推荐

