当前位置: 首页 > news >正文

android-PMS-创建新用户流程

Android PMS(Package Manager Service)创建新用户的流程涉及系统服务和权限管理,核心步骤如下:


🔑 一、权限校验与初始化

  1. 申请权限
    调用方需具备 MANAGE_USERS 系统权限,并在 AndroidManifest.xml 声明:

    <uses-permission android:name="android.permission.MANAGE_USERS" />
    
  2. 获取 UserManager 服务
    通过系统服务初始化 UserManager 对象:

    UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
    

👤 二、创建新用户

  1. 调用创建接口
    使用 createUser()createProfileForUser() 创建用户:

    // 创建独立用户
    UserHandle newUser = userManager.createUser("新用户名", UserInfo.FLAG_FULL);// 创建关联用户(如工作资料)
    UserHandle profile = userManager.createProfileForUser("工作资料", UserInfo.FLAG_MANAGED_PROFILE, mainUserId);
    
  2. 用户类型与权限标识

    • UserInfo.FLAG_FULL:标准用户(完整权限)
    • UserInfo.FLAG_RESTRICTED:受限用户
    • UserInfo.FLAG_MANAGED_PROFILE:工作资料(关联主用户上下文)

三、PMS 数据处理流程

  1. 用户目录初始化
    PMS 自动创建用户专属数据目录:

    • /data/user/<userId>:应用私有数据存储
    • /data/media/<userId>:媒体文件存储
  2. 系统应用克隆
    为新用户复制系统应用数据:

    • 扫描 /system/app/system/priv-app 等目录
    • 为每个系统应用生成独立数据副本
  3. 权限配置同步
    PMS 将主用户的权限规则同步至新用户环境:

    userManager.setApplicationRestrictions(packageName, newUser, restrictionsBundle);
    

🔄 四、用户切换(可选)

调用 ActivityManager 切换到新用户:

ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
am.switchUser(newUser.getIdentifier());

️ 五、关键注意事项

  1. 特权限制

    • 普通应用无法调用 createUser(),需系统应用或特权进程
    • 设备需启用多用户支持(userManager.supportsMultipleUsers()
  2. 数据隔离机制

    • 应用安装时 PMS 为每个用户生成独立 UID
    • 跨用户数据访问需声明 INTERACT_ACROSS_USERS 权限
  3. 系统兼容性

    • Android 5.0+ 支持托管配置文件(Managed Profile)
    • Android 9+ 优化了用户创建的异步处理逻辑

📊 执行流程图

graph LR
A[调用 createUser()] --> B{PMS 初始化}
B --> C[创建用户目录 /data/user/<userId>]
C --> D[克隆系统应用数据]
D --> E[同步权限配置]
E --> F[注册用户至 Settings 数据库]
F --> G[触发 USER_ADDED 广播]
G --> H[可选切换用户]

引用链接:
1.Android 系统(239)—Android PMS的创建过程 - CSDN博客
2.android系统 pms详解 - CSDN博客
3.测试多用户 | Android Open Source Project - Android
4.Android PM 创建 User - 51CTO博客
5.Android Framework 框架系列之 PackageManagerService - 博客园
6.添加用户的流程分析 - 博客园
7.彻底搞明白PMS原理 - CSDN博客
8.Android 9.x 多用户机制 1 #Profile user创建过程 - CSDN博客
9.android 创建用户 切换用户 - 51CTO博客
10.Android12 增加user - 51CTO博客
11.智能酒店PMS操作全解析:从注册到添加房型 - 悲凉染江山
12.android 用户添加 安卓新建用户 - 51CTO博客
13.创建Android应用-创建应用-创建项目和应用-AppGallery Connect(HarmonyOS 3.1/4.0及以下) - 华为HarmonyOS开发者 - 华为开发者联盟
14.Android 应用程序安装流程解析 - 掘金开发者社区
15.深入解析 Android PMS —— APK 安装与解析全流程 - CSDN博客
16.Android 如何创建一个用户 - 51CTO博客
17.开始使用一键登录和注册 | Identity | Android Developers - Google
18.Wear OS - Android
19.Android PMS——应用安装流程介绍(五) - CSDN下载
20.开发者指南 - Android
21.Android PMS应用安装流程源码分析下篇-安装包校验及安装 - 掘金开发者社区
22.App出海上架安卓谷歌市场 - 大山 出海资源
23.Android账户管理系统课程设计项目 - CSDN博客

http://www.lryc.cn/news/604788.html

相关文章:

  • 舆情监测专员需要哪些常用软件工具?
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(一)
  • 论文Review 3DGSSLAM S3PO-GS | ICCV 2025 港科广出品!| 高效快速的3DGSSLAM!
  • sqli-labs:Less-1关卡详细解析
  • CMS框架漏洞
  • 3D Web轻量化引擎HOOPS Communicator数据处理与流式加载能力概述
  • 【音视频】WebRTC-Web 音视频采集与播放
  • 【预判一手面试问题:排序】
  • 依托客户满意度分析协助企业精准把握市场趋势​(满意度调查)
  • 智能AI医疗物资/耗材管理系统升级改造方案分析
  • InfluxDB 与 Java 框架集成:Spring Boot 实战(二)
  • VSCode插件开发完整教程:从零开始创建文件导出插件
  • Python 程序设计讲义(37):字符串的处理方法——设置字符串居中显示:center() 方法
  • 图像平滑处理
  • 9.项目起步(3)
  • OpenCV学习day1
  • 实习小记(个人中心的编辑模块)
  • 商标注册后可以随意更改字体和颜色吗!
  • 怎么理解锁相环主时钟(PLL)怎么做到对时钟进行倍频?
  • Keil STM32工程各文件作用
  • AI框架工具FastRTC快速上手2——整体框架及Stream类详解
  • 方块世界:失落文明的遗产
  • Deforum Stable Diffusion,轻松实现AI视频生成自由!
  • 语音识别dolphin 学习笔记
  • UE5多人MOBA+GAS 番外篇:将冷却缩减属性应用到技能冷却中
  • 设计模式十四:适配器模式(Adapter Pattern)
  • Linux ps -ef 命令解析
  • 基于成像空间转录组技术的肿瘤亚克隆CNV原位推断方法
  • composer 常用命令
  • 智慧城市SaaS平台|市政公用管理系统