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

使用data_usage插件开发应用数据统计功能时出现PERMISSION_NOT_GRANTED异常

报错原因说明

你遇到的PlatformException(PERMISSION_NOT_GRANTED, null, null, null)报错,是因为data_usage插件统计应用流量需要安卓系统的应用使用情况访问权限,该权限属于特殊权限,未授权时直接调用插件接口就会触发未处理异常。
报错截图:
报错截图

排查步骤
  • 检查android/app/src/main/AndroidManifest.xml中是否已经注册了权限声明
  • 调用插件的权限检查接口,确认当前App是否已经拿到授权
  • 确认业务逻辑是否存在未申请权限就直接调用流量查询接口的情况
解决方案

1. 注册清单权限

在AndroidManifest.xml的manifest节点下添加对应权限:

<!-- 通用应用使用情况权限 -->
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
<!-- 安卓14及以上版本额外需要的流量历史读取权限 -->
<uses-permission android:name="android.permission.READ_NETWORK_USAGE_HISTORY" />

2. 添加权限校验流程

在调用所有流量查询接口前,先执行权限检查和申请逻辑,示例代码如下:

import 'package:data_usage/data_usage.dart';

Future<void> loadAppUsageData() async {
  // 先检查权限是否已授予
  bool isPermissionGranted = await DataUsage.instance.checkPermission();
  if (!isPermissionGranted) {
    // 未授权跳转系统设置页申请权限
    await DataUsage.instance.requestPermission();
    // 跳转回来后二次检查权限
    isPermissionGranted = await DataUsage.instance.checkPermission();
  }
  // 确认权限已获取后再执行业务逻辑
  if (isPermissionGranted) {
    // 调用流量查询接口
    var appUsageList = await DataUsage.instance.getUsageForAllApps();
    // 处理返回的流量数据
  } else {
    // 权限被拒绝的降级处理,比如弹提示告知用户功能无法使用
  }
}

3. 适配特殊场景

  • 申请权限前建议先弹出自定义提示框,告知用户需要开启「应用使用情况访问权限」才能统计流量数据,降低用户拒绝概率
  • 小米、华为、vivo等国产定制系统可能对该权限有额外限制,若走官方申请流程仍无法拿到权限,可引导用户手动进入系统安全设置,找到对应App的权限管理页手动开启应用使用情况权限
  • 做好权限被拒绝的兜底逻辑,不要强制调用接口导致App崩溃

内容的提问来源于stack exchange,提问作者Germanus Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 23:06:05