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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:40:12