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

如何导出Digital Wellbeing数据至第三方应用或获取安卓应用屏幕时间

解决方案:安卓应用屏幕时间数据获取

一、自行追踪应用屏幕时间

1. 使用官方UsageStatsManager API

安卓从API 21开始提供UsageStatsManager,可用于获取系统中应用的使用统计数据,包括屏幕活跃时间。

步骤:

  • 申请权限:在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"
                     tools:ignore="ProtectedPermissions" />
    
    注意:该权限无法通过常规的requestPermissions()获取,需引导用户跳转到系统设置页面开启:
    val intent = Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)
    startActivity(intent)
    
  • 查询屏幕时间数据:通过UsageStatsManager获取指定时间段内的应用使用统计,筛选出屏幕活跃时长:
    val usageStatsManager = getSystemService(USAGE_STATS_SERVICE) as UsageStatsManager
    val endTime = System.currentTimeMillis()
    val startTime = endTime - 24 * 60 * 60 * 1000 // 过去24小时
    
    val queryUsageStats = usageStatsManager.queryUsageStats(
        UsageStatsManager.INTERVAL_DAILY,
        startTime,
        endTime
    )
    
    for (usageStats in queryUsageStats) {
        val packageName = usageStats.packageName
        val totalScreenTime = usageStats.totalTimeInForeground // 前台活跃时长(毫秒)
        // 处理数据
    }
    

2. 监听应用前后台切换(实时追踪)

若需要实时记录应用的屏幕时间,可通过以下两种方式:

  • ActivityLifecycleCallbacks:注册全局生命周期回调,监听所有Activity的onResume和onPause事件,记录当前应用的活跃时间段,累计计算屏幕时间。
  • AccessibilityService:通过辅助服务监听应用窗口的切换事件,记录每个应用的前台停留时长。此方法需用户开启辅助服务权限,且不受应用自身生命周期限制,但需遵守安卓辅助服务的规范。

二、读取Digital Wellbeing的数据

Digital Wellbeing暂无公开官方API,但可通过非公开的Content Provider读取部分数据(注意:该方式依赖系统实现,可能随系统版本更新失效,且部分定制ROM可能限制访问):

步骤:

  • 申请权限:在AndroidManifest.xml中添加:
    <uses-permission android:name="android.permission.READ_DIGITAL_WELLBEING" />
    
  • 查询Content Provider:通过ContentResolver查询Digital Wellbeing的存储数据,示例代码:
    val contentResolver = contentResolver
    val uri = Uri.parse("content://com.google.android.apps.wellbeing.api/daily_summary")
    val cursor = contentResolver.query(uri, null, null, null, null)
    
    cursor?.use {
        while (it.moveToNext()) {
            val packageName = it.getString(it.getColumnIndexOrThrow("package_name"))
            val screenTimeMs = it.getLong(it.getColumnIndexOrThrow("screen_time_ms"))
            // 处理数据
        }
    }
    
    注意:不同系统版本的URI和字段名可能不同,需根据实际系统版本适配。

提示:Google Fit API确实仅提供运动健康类数据,不包含应用屏幕时间,无需继续尝试该途径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:47:30