当前位置: 首页 > 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.dtcms.com/a/305686.html

相关文章:

  • CSS3 圆角
  • 【鸿蒙应用开发中,`signingConfigs` 用于配置应用签名的关键信息说明】
  • Vue.js 与后端技术结合开发指南
  • Python爬虫05_Requests肯德基餐厅位置爬取
  • jmeter读取上游接口并遍历数组数据并进行压测
  • Jmeter分布式测试
  • 【力扣热题100】哈希——字母异位词分组
  • Axure下拉菜单:从基础交互到高保真元件库应用
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(二)
  • jmeter--While控制器--循环直到接口响应符合条件
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(三)
  • GitOps: Tekton + ArgoCD
  • python反爬:一文掌握 undetected-chromedriver 的详细使用(可通过机器人验证)
  • MacTex+Vscode数学建模排版
  • LLM—— 基于 MCP 协议(Streamable HTTP 模式)的工具调用实践
  • 爱车生活汽车GPS定位器:智能监控与安全驾驶的守护者
  • chukonu阅读笔记(2)
  • 开源 Arkts 鸿蒙应用 开发(十三)音频--MP3播放
  • jmeter实战案例
  • day21-Excel文件解析
  • cpp c++面试常考算法题汇总
  • 云计算:一场关于“数字水电煤”的革命与未来
  • 机器学习之线性回归的入门学习
  • 【翻译】Label Studio——开源标注工具README.md
  • 如何轻松将 Windows 10 或 11 PC恢复出厂设置
  • 数据集:机器学习的基石
  • 服务器与电脑主机的区别,普通电脑可以当作服务器用吗?
  • 2025年AI安全威胁全景:从对抗性机器学习到量子计算挑战
  • winsock socket通讯为什么UDP服务器无法获取客户端IP?
  • QML 基础语法与对象模型