如何导出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的存储数据,示例代码:
注意:不同系统版本的URI和字段名可能不同,需根据实际系统版本适配。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")) // 处理数据 } }
提示:Google Fit API确实仅提供运动健康类数据,不包含应用屏幕时间,无需继续尝试该途径。
内容的提问来源于stack exchange,提问作者Ujjwal Mishra
相关产品推荐
相关产品推荐

