WearOS获取使用时间权限异常:无法打开使用访问设置页面
关于Wear OS中
PACKAGE_USAGE_STATS权限的确认及解决方案 权限支持情况确认
Wear OS(包括Galaxy Watch4搭载的Wear OS 3)确实不支持PACKAGE_USAGE_STATS权限。该权限对应的应用使用统计功能仅为Android手机/平板设计,穿戴设备系统并未开放相关功能模块,因此会出现以下现象:
- 调用
Settings.ACTION_USAGE_ACCESS_SETTINGS无反应,系统不存在该设置页面 - 手动查找权限入口时无法找到对应选项
- 尝试打开相关设置页面可能引发设置应用异常
解决方案
由于系统限制无法获取跨应用的使用统计数据,只能针对自身应用的使用时长做替代实现:
1. 自行统计应用内部使用时长
通过监听应用生命周期事件,记录每次前台运行的时间差,累计存储使用时长。在Jetpack Compose中可以通过LifecycleEventObserver实现:
@Composable fun AppUsageTracker() { val lifecycleOwner = LocalLifecycleOwner.current var sessionStartTime by remember { mutableLongStateOf(0L) } val usageRepo = remember { LocalUsageStatsRepo.current } DisposableEffect(lifecycleOwner) { val observer = LifecycleEventObserver { _, event -> when (event) { Lifecycle.Event.ON_RESUME -> { sessionStartTime = System.currentTimeMillis() } Lifecycle.Event.ON_PAUSE -> { val sessionDuration = System.currentTimeMillis() - sessionStartTime usageRepo.updateTotalUsage(sessionDuration) } else -> Unit } } lifecycleOwner.lifecycle.addObserver(observer) onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } } } // 本地存储实现示例(使用DataStore) class LocalUsageStatsRepo(private val context: Context) { private val dataStore = context.createDataStore(name = "app_usage") private val totalUsageKey = longPreferencesKey("total_usage_duration") suspend fun updateTotalUsage(addDuration: Long) { dataStore.edit { preferences -> val currentTotal = preferences[totalUsageKey] ?: 0L preferences[totalUsageKey] = currentTotal + addDuration } } suspend fun getTotalUsage(): Long { return dataStore.data.first()[totalUsageKey] ?: 0L } // 提供Compose可访问的实例 companion object { val current = staticCompositionLocalOf<LocalUsageStatsRepo> { error("LocalUsageStatsRepo not provided") } } }
2. 功能限制说明
这种自行统计的方式仅能获取当前应用的使用时长,无法获取其他应用的使用数据,这是Wear OS系统的硬性限制,没有官方或合规的绕过方案。
内容的提问来源于stack exchange,提问作者Ashman
相关产品推荐
相关产品推荐

