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

如何通过ACTION_APP_USAGE_SETTINGS为指定UserHandle打开对应数字健康应用?

解决指定用户打开数字健康应用的问题

ACTION_APP_USAGE_SETTINGS 意图本身不支持通过 Intent.EXTRA_USER 直接切换用户,要打开对应工作资料(或指定用户)的数字健康页面,核心是使用目标用户的上下文启动意图,而非在当前用户上下文里传递参数。

具体实现代码

通过 Context.createPackageContextAsUser() 创建指定用户的上下文,再用该上下文启动目标意图:

fun startAppUsageStatsForUser(context: Context, userHandle: UserHandle, packageName: String): Boolean {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        return try {
            // 创建目标用户的上下文实例
            val userContext = context.createPackageContextAsUser(
                context.packageName,
                0,
                userHandle
            )
            // 构建并启动对应用户的数字健康意图
            val intent = Intent(Settings.ACTION_APP_USAGE_SETTINGS).apply {
                putExtra(Intent.EXTRA_PACKAGE_NAME, packageName)
                addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            }
            userContext.startActivity(intent)
            true
        } catch (e: Exception) {
            // 捕获权限不足、用户不存在等异常
            e.printStackTrace()
            false
        }
    }
    return false
}

关键注意事项

  • 权限要求:应用需要 INTERACT_ACROSS_USERS 或 INTERACT_ACROSS_USERS_FULL 系统级权限,这类权限通常仅对系统应用或拥有特定签名的应用开放。若为普通应用,可结合 DevicePolicyManager(若应用是工作资料管理应用)来实现跨用户操作。
  • 版本兼容:该方案仅适用于 Android Q(API 29)及以上版本,低版本系统对跨用户上下文的支持有限。
  • 异常处理:需处理 PackageManager.NameNotFoundException、SecurityException 等异常,避免因用户不存在、权限缺失导致崩溃。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 15:15:35