如何在Flutter应用中获取应用使用时长以实现饼图展示?
获取各应用使用时长的Flutter实现方案
由于Flutter没有跨平台的统一API来获取其他应用的使用时长,需要针对Android和iOS分别处理,具体如下:
Android平台
- 权限要求:必须申请
android.permission.PACKAGE_USAGE_STATS权限,这是系统特殊权限,无法通过常规弹窗请求,需要引导用户跳转到系统设置的"应用使用权限"页面手动开启。 - 实现方式:通过MethodChannel调用Android原生的
UsageStatsManagerAPI获取数据:- 在Android原生代码中编写查询方法(以Kotlin为例):
fun fetchAppUsageStats(): List<HashMap<String, Any>> { val usageManager = getSystemService(Context.USAGE_STATS_SERVICE) as UsageStatsManager val endTime = System.currentTimeMillis() val startTime = endTime - 24 * 60 * 60 * 1000 // 查询最近24小时 val statsList = usageManager.queryUsageStats( UsageStatsManager.INTERVAL_DAILY, startTime, endTime ) val result = mutableListOf<HashMap<String, Any>>() for (stats in statsList) { if (stats.totalTimeInForeground <= 0) continue val appInfo = packageManager.getApplicationInfo(stats.packageName, 0) val appName = packageManager.getApplicationLabel(appInfo).toString() result.add(HashMap<String, Any>().apply { put("appName", appName) put("packageName", stats.packageName) put("usageMs", stats.totalTimeInForeground) }) } return result }- 在Flutter端通过MethodChannel调用该方法,拿到数据后转换为饼图所需的格式(比如按应用名称分组、计算时长占比等)。
iOS平台
iOS对应用隐私限制非常严格:
- 普通Flutter应用无法获取其他应用的使用时长,苹果仅允许特定类型的应用(如家长监管类)申请
com.apple.developer.usagedescription权限,且需要通过苹果的特殊审核流程。 - 若仅需获取当前应用的使用时长,可通过Flutter的
WidgetsBindingObserver监听应用前后台状态,自行统计时长。
内容的提问来源于stack exchange,提问作者Bran
相关产品推荐
相关产品推荐

