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

如何在Flutter应用中获取应用使用时长以实现饼图展示?

获取各应用使用时长的Flutter实现方案

由于Flutter没有跨平台的统一API来获取其他应用的使用时长,需要针对Android和iOS分别处理,具体如下:

Android平台

  • 权限要求:必须申请android.permission.PACKAGE_USAGE_STATS权限,这是系统特殊权限,无法通过常规弹窗请求,需要引导用户跳转到系统设置的"应用使用权限"页面手动开启。
  • 实现方式:通过MethodChannel调用Android原生的UsageStatsManager API获取数据:
    1. 在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
    }
    
    1. 在Flutter端通过MethodChannel调用该方法,拿到数据后转换为饼图所需的格式(比如按应用名称分组、计算时长占比等)。

iOS平台

iOS对应用隐私限制非常严格:

  • 普通Flutter应用无法获取其他应用的使用时长,苹果仅允许特定类型的应用(如家长监管类)申请com.apple.developer.usagedescription权限,且需要通过苹果的特殊审核流程。
  • 若仅需获取当前应用的使用时长,可通过Flutter的WidgetsBindingObserver监听应用前后台状态,自行统计时长。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:12:43