如何通过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
相关产品推荐
相关产品推荐

