当前位置: 首页 > 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.xdnf.cn/news/1213687.html

相关文章:

  • VUE -- 基础知识讲解(三)
  • 记录Linux下ping外网失败的问题
  • 时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式
  • 问题1:uniapp在pages样式穿刺没有问题,在components组件中样式穿刺小程序不起效果
  • Django常见模型字段
  • 一篇文章读懂麦科信CP3008系列高频交直流电流探头
  • 基于数字信息化的全面研发项目管理︱裕太微电子股份有限公司研发项目管理部负责人唐超
  • 新手向:DeepSeek 部署中的常见问题及解决方案
  • Jupyter Notebook 中显示图片、音频、视频的方法汇总
  • RabbitMQ 发送方确认的两大工具 (With Spring Boot)
  • 开源 Arkts 鸿蒙应用 开发(十三)音频--MP3播放
  • 在线教育场景下AI应用,课程视频智能生成大纲演示
  • 大厂主力双塔模型实践与线上服务
  • 【swoole Windows 开发(swoole-cli 开发 hyperf)】
  • 算法训练营day36 动态规划④ 1049. 最后一块石头的重量 II、494. 目标和、474.一和零
  • 基于Rust与HDFS、YARN、Hue、ZooKeeper、MySQL
  • 【ee类保研面试】数学类---线性代数
  • 【iOS】weak修饰符
  • USRP捕获手机/路由器数据传输信号波形
  • 国内好用的智能三防手机,适合户外、工业、公共安全等场景
  • LLMs之Agent:GLM-4.5的简介、安装和使用方法、案例应用之详细攻略
  • 【MySQL学习|黑马笔记|Day3】多表查询(多表关系、内连接、外连接、自连接、联合查询、子查询),事务(简介、操作、四大体系、并发事务问题、事务隔离级别)
  • 智能车辆热管理测试方案——提升效能与保障安全
  • Three.js 与 WebXR:初识 VR/AR 开发
  • 多模通信·数据采集:AORO P9000U三防平板带来定制化解决方案
  • 如何在出售Windows11/10/8/7前彻底清除电脑数据
  • B站 XMCVE Pwn入门课程学习笔记(6)
  • 洛谷刷题7.30
  • C++反射
  • 认识ansible(入门)