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

【笔记】Android 多用户模式和用户类型

简介

用户界面:System =》Multiple Users =》 开关多用户模式。

一般是不同用户模式下,有修改Settings应用配置的权限差异,因此需要通过用户类型对功能进行判断限制。

代码

通过UserManager可以获取当前用户的信息。

frameworks/base/core/java/android/os/UserManager.java

提供多种判断当前用户类型的接口

UserManager功能接口
APIComment
getUserType()

获取当前用户类型

@return the user type of the context user.

getUserName()

获取当前用户名

Returns the user name of the context user. This call is only available to applications on the system image.

isSystemUser()

判断是否为系统用户

Used to check if the context user is the system user. The system user is the initial user that is implicitly created on first boot and hosts most of the system services.

isGuestUser()

基于上下文,判断是否为访客用户

Used to check if the context user is a guest user. A guest user may be transient.

@return whether the context user is a guest user.

isGuestUser(@UserIdInt int userId)

判断指定ID是否为访客用户

Checks if a user is a guest user.

@return whether user is a guest user.

isUserAdmin(@UserIdInt int userId)

判断指定指定id的用户是否为admin(admin可以不唯一)

返回user.isAdmin()

@hide Returns whether the provided user is an admin user. There can be more than one admin user.

源码

/*** Manages users and user details on a multi-user system. There are two major categories of* users: fully customizable users with their own login, and profiles that share a workspace* with a related user.* <p>* Users are different from accounts, which are managed by* {@link AccountManager}. Each user can have their own set of accounts.* <p>* See {@link DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE} for more on managed profiles.*/
@SystemService(Context.USER_SERVICE)
@android.ravenwood.annotation.RavenwoodKeepPartialClass
public class UserManager {/*** @return the user type of the context user.* @hide*/@TestApi@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,android.Manifest.permission.CREATE_USERS,android.Manifest.permission.QUERY_USERS})@UserHandleAwarepublic @NonNull String getUserType() {UserInfo userInfo = getUserInfo(mUserId);return userInfo == null ? "" : userInfo.userType;}

获取用户信息的方法

代码案例:

通过系统服务获取UserManager对象,然后根据需求get信息。

   //判断是否为Owner机主  private static boolean isAdminUser(Context context) {if (context == null) return false;final UserManager userManager = context.getSystemService(UserManager.class);if (userManager == null) return false;//获取当前用户类型 Log.d(TAG, "isAdminUser: Now user is " + userManager.getUserType());return userManager.isAdminUser();}

常见用户类型

常见类型是Owner,User和Guest。

多用户模式用户类型映射关系
StringUSER_TYPE用户场景说明
USER_TYPE_FULL_SYSTEMandroid.os.usertype.full.SYSTEM

Owner,即机主,adminUser。

 User type representing a {@link UserHandle#USER_SYSTEM system} user that is a human user.
 This type of user cannot be created; it can only pre-exist on first boot.
USER_TYPE_FULL_SECONDARYandroid.os.usertype.full.SECONDARYUser,非Owner(机主)用户。User type representing a regular non-profile non-{@link UserHandle#USER_SYSTEM system} human
user.
This is sometimes called an ordinary 'secondary user'.
USER_TYPE_FULL_GUESTandroid.os.usertype.full.GUESTGuset,访客模式User type representing a guest user that may be transient.
USER_TYPE_FULL_DEMOandroid.os.usertype.full.DEMO怎么变成demo?User type representing a user for demo purposes only, which can be removed at any time.
USER_TYPE_FULL_RESTRICTEDandroid.os.usertype.full.RESTRICTED受限用户,profile是什么?User type representing a "restricted profile" user, which is a full user that is subject to
certain restrictions from a parent user. Note, however, that it is NOT technically a profile.
USER_TYPE_PROFILE_MANAGEDandroid.os.usertype.profile.MANAGEDDPC是啥?APN里面有查询

User type representing a managed profile, which is a profile that is to be managed by a
device policy controller (DPC).
The intended purpose is for work profiles, which are managed by a corporate entity.

 @FlaggedApi(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE)

USER_TYPE_PROFILE_CLONEandroid.os.usertype.profile.CLONE克隆某用户

User type representing a clone profile. Clone profile is a user profile type used to run
second instance of an otherwise single user App (eg, messengers). Currently only the
{@link android.content.pm.UserInfo#isMain()} user can have a clone profile.

@FlaggedApi(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE)

USER_TYPE_PROFILE_PRIVATEandroid.os.usertype.profile.PRIVATE

User type representing a private profile. Private profile is a user profile that can be used
as an alternative user-space to install and use sensitive apps.
UI surfaces can adopt an alternative strategy to show apps belonging to this profile, in line
with their sensitive nature.
 

@FlaggedApi(android.os.Flags.FLAG_ALLOW_PRIVATE_PROFILE)

USER_TYPE_PROFILE_TESTandroid.os.usertype.profile.TEST测试User type representing a generic profile for testing purposes. Only on debuggable builds.
USER_TYPE_PROFILE_COMMUNALandroid.os.usertype.profile.COMMUNAL多个用户共享一些资源而不共享敏感信息。User type representing a communal profile, which is shared by all users of the device.
public static final String USER_TYPE_FULL_SYSTEM = "android.os.usertype.full.SYSTEM";
public static final String USER_TYPE_FULL_SECONDARY = "android.os.usertype.full.SECONDARY";
public static final String USER_TYPE_FULL_GUEST = "android.os.usertype.full.GUEST";
public static final String USER_TYPE_FULL_DEMO = "android.os.usertype.full.DEMO";
public static final String USER_TYPE_FULL_RESTRICTED = "android.os.usertype.full.RESTRICTED";
public static final String USER_TYPE_PROFILE_MANAGED = "android.os.usertype.profile.MANAGED";
public static final String USER_TYPE_PROFILE_CLONE = "android.os.usertype.profile.CLONE";
public static final String USER_TYPE_PROFILE_PRIVATE = "android.os.usertype.profile.PRIVATE";
public static final String USER_TYPE_PROFILE_TEST = "android.os.usertype.profile.TEST";
public static final String USER_TYPE_PROFILE_COMMUNAL = "android.os.usertype.profile.COMMUNAL";
public static final String USER_TYPE_FULL_SYSTEM = "android.os.usertype.full.SYSTEM";
public static final String USER_TYPE_FULL_SECONDARY = "android.os.usertype.full.SECONDARY";
public static final String USER_TYPE_FULL_GUEST = "android.os.usertype.full.GUEST";
public static final String USER_TYPE_FULL_DEMO = "android.os.usertype.full.DEMO";
public static final String USER_TYPE_FULL_RESTRICTED = "android.os.usertype.full.RESTRICTED";
public static final String USER_TYPE_PROFILE_MANAGED = "android.os.usertype.profile.MANAGED";
public static final String USER_TYPE_PROFILE_CLONE = "android.os.usertype.profile.CLONE";
public static final String USER_TYPE_PROFILE_PRIVATE = "android.os.usertype.profile.PRIVATE";
public static final String USER_TYPE_PROFILE_TEST = "android.os.usertype.profile.TEST";
public static final String USER_TYPE_PROFILE_COMMUNAL = "android.os.usertype.profile.COMMUNAL";
public static final String USER_TYPE_SYSTEM_HEADLESS = "android.os.usertype.system.HEADLESS";

相关文章:

【笔记】Android 多用户模式和用户类型

简介 用户界面&#xff1a;System 》Multiple Users 》 开关多用户模式。 一般是不同用户模式下&#xff0c;有修改Settings应用配置的权限差异&#xff0c;因此需要通过用户类型对功能进行判断限制。 代码 通过UserManager可以获取当前用户的信息。 frameworks/base/core/…...

SQL基础——MySQL的索引

简介&#xff1a;个人学习分享&#xff0c;如有错误&#xff0c;欢迎批评指正。 一、概述 介绍 索引是通过某种算法&#xff0c;构建出一个数据模型&#xff0c;用于快速找出在某个列中有一特定值的行&#xff0c;不使用索引&#xff0c;MySQL必须从第一条记录开始读完整个表&…...

【开发语言】面向对象和面向过程开发思路的区别

引入&#xff1a; 我总结了 面向过程的开发语言思路&#xff1a;1.我要干啥&#xff1f;2.怎么才能实现 面向对象的开发语言思路&#xff1a;1.我要研究谁&#xff1f;2.他能干啥 详解&#xff1a; 面向过程的开发语言思路 我要干啥&#xff1f; 在面向过程的开发中&a…...

谷歌账号登录的时候提示被停用,原因是什么,账号还有救吗?该如何处理?

今日早上&#xff0c;有个久违的朋友找到我说&#xff0c;要恢复账号。 他的情况是这样的&#xff1a;7月21日的时候&#xff0c;他发现自己的谷歌账号登录的时候提示活动异常先&#xff0c;需要输入手机号码验证才能恢复账号。但是输入了自己和亲友们的多个手机号码都无法验证…...

数据库复习笔记

写在最前&#xff0c; 写文章的初衷只是为了复习与记录自己的成长&#xff0c;笔者目前水平还有待提高&#xff0c;文章中难免会出现许多问题与错误&#xff0c;文章内容仅供参考&#xff0c;有不足的地方还请大家多多包涵并指正&#xff0c;谢谢~ 第八章 T-SQL程序结构 8.…...

学习STM32(6)-- STM32单片机ADCDAC的应用

1 引 言 深入了解并掌握STM32F103单片机在模拟数字转换&#xff08;ADC&#xff09;和数字模拟转换&#xff08;DAC&#xff09;应用方面的功能和操作。学习如何配置STM32F103的ADC模块&#xff0c;实现模拟信号到数字信号的精确转换&#xff1b;同时&#xff0c;探索DAC模块…...

学习记录第二十五天

wait函数 wait函数是一个系统调用&#xff0c;用于等待一个子进程结束并回收其资源。当父进程调用wait函数时&#xff0c;它会暂停执行&#xff0c;直到至少有一个子进程结束。wait函数的原型如下&#xff1a; #include <sys/types.h> #include <sys/wait.h>pid_…...

C语言:字符串函数strcmp

该函数用于比较两个字符串是否一样。 使用方法如下&#xff1a; #include<stdio.h> #include<string.h>int main() {//strcmp函数返回值有三种情况&#xff0c;小于零时返回-1&#xff0c;等于零&#xff0c;大于零时返回1printf("%d\n", strcmp("…...

【数据分析---偏企业】 Excel操作

各位大佬好 &#xff0c;这里是阿川的博客&#xff0c;祝您变得更强 个人主页&#xff1a;在线OJ的阿川 大佬的支持和鼓励&#xff0c;将是我成长路上最大的动力 阿川水平有限&#xff0c;如有错误&#xff0c;欢迎大佬指正 Excel操作前 必看 Python 初阶 Python—语言基础与…...

Ajax-01.原生方式

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Ajax-原生方式</title> </head> <!-…...

OpenAI GPT-2 model use with TensorFlow JS

题意&#xff1a;使用 TensorFlow JS 应用 OpenAI GPT-2 模型 问题背景&#xff1a; Is that possible to generate texts from OpenAI GPT-2 using TensorFlowJS? 是否可以使用 TensorFlowJS 生成 OpenAI GPT-2 的文本&#xff1f; If not what is the limitation, like mo…...

JVM-运行数据区(堆、栈、元空间)

文章声明&#xff1a;文章图片均来自互联网&#xff0c;因为本人画的图不够生动。 运行数据区是JVM最重要的一个区域。 运行数据区由栈、堆、元空间构成。 栈&#xff1a;程序计数器、JVM虚拟机栈&#xff0c;本地方法栈 本地方法栈&#xff1a;加载native修饰的方法&#…...

超详细!!! LVS(Linux virual server)负载均衡知识及其NAT模式、DR模式、火墙标记实验

目录 前言系统性能扩展方式集群Cluster分布式集群与分布式 四层转发与七层转发的区别 LVS&#xff08;Linux virual server&#xff09;一、LVS介绍LVS相关概念 二、LVS集群结构体系1. 负载均衡层&#xff08;Load Balancer&#xff09;2. 服务器群组层&#xff08;Server Pool…...

信息学奥赛一本通1259:【例9.3】求最长不下降序列

题目&#xff1a; 1259&#xff1a;【例9.3】求最长不下降序列 时间限制: 1000 ms 内存限制: 65536 KB 提交数:51218 通过数: 20928 Special Judge 【题目描述】 设有由n(1≤n≤200)n(1≤n≤200)个不相同的整数组成的数列&#xff0c;记为:b(1)、b(2)、……、…...

星露谷模组开发教程#3 事件

首发于Enaium的个人博客 SMAPI提供了一些事件&#xff0c;比如游戏的内容、显示、输入等事件。这些事件可以让我们在游戏中添加自己的逻辑。这一节我们就来看看如何使用这些事件。 注册一个事件 在SMAPI中&#xff0c;我们可以通过IModHelper的Events属性来注册事件。比如我们…...

C语言程序设计(初识C语言后部分)

愿天下无Bug&#xff0c;秀发常驻。 3&#xff09;函数的参数 1.实际参数&#xff08;实参&#xff09;&#xff1a; 真实传给函数的参数&#xff0c;叫实参。 实参可以是&#xff1a;常量、变量、表达式、函数等。 无论实参是何类型的量&#xff0c;在进行函数调用时&#…...

驱动基础开发

1、字符设备传统开发模板 字符设备驱动框架&#xff0c;首先我们需要去用module_init这个宏去修饰整个驱动的入口函数&#xff0c;用module_exit去修饰整个驱动的出口函数&#xff0c;然后还需要用MODULE_LICENSE用于声明模块的许可证类型。 在入口函数里面我们需要注册字符设…...

从苹果AppStore看AI开发者生态

从苹果 App Store 看 AI 开发者生态 在人工智能迅速发展的今天&#xff0c;我们不禁要问&#xff1a;未来的 AI 开发者生态将会是什么样子&#xff1f;为了回答这个问题&#xff0c;我们不妨回顾一下移动互联网时代最成功的开发者生态之一——苹果的 App Store。 通过分析 App …...

【Python学习-UI界面】PyQt5 小部件1-Label

QLabel 对象可用作显示不可编辑的文本、图像或动态GIF影片的占位符。 它还可以用作其他小部件的助记键。 标签可以显示普通文本、超链接或富文本。 1、普通文本 直接双击输入即可 2、添加超链接 选中对应Label&#xff0c;右键选择多信息文本&#xff0c;添加链接&#xff0c…...

【Linux详解】进度条实现 Linux下git 的远程上传

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;Linux—登神长阶 ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; &#x1f680;前言 &#x…...

别再为FDC2214数据抖动发愁了!一个接地气的屏蔽线替代方案与差分测量实战

FDC2214抗干扰实战&#xff1a;差分测量与数据稳定化技巧 在电容式传感项目中&#xff0c;FDC2214作为一款高分辨率多通道电容数字转换器&#xff0c;常被用于纸张计数、液位检测等场景。然而实际应用中&#xff0c;工程师们最头疼的莫过于数据抖动问题——导线轻微移动、环境…...

深入Nachos文件系统:我是如何修复‘文件无法追加写入’这个经典Bug的

深入Nachos文件系统&#xff1a;我是如何修复‘文件无法追加写入’这个经典Bug的 1. 问题定位与背景分析 第一次在Nachos文件系统中尝试追加写入文件时&#xff0c;我遇到了一个令人困惑的现象&#xff1a;无论怎么操作&#xff0c;文件内容都无法正确扩展。这个看似简单的功能…...

GPU加速向量搜索实战:基于cuvs实现Faiss性能飞跃与大规模向量检索

1. 项目概述&#xff1a;当传统CPU计算成为瓶颈&#xff0c;我们如何加速向量搜索&#xff1f; 如果你最近在折腾大模型应用、推荐系统或者图像检索&#xff0c;大概率会碰到一个绕不开的核心问题&#xff1a;向量相似性搜索。简单来说&#xff0c;就是把文本、图片、音频这些非…...

STM32CubeMX 实战指南:LL库外部中断配置与按键响应优化

1. STM32CubeMX与LL库外部中断入门 第一次接触STM32外部中断时&#xff0c;我被它的响应速度惊艳到了。相比轮询方式&#xff0c;中断能让CPU在按键按下瞬间立即响应&#xff0c;就像有个24小时待命的管家。STM32CubeMX这个图形化配置工具&#xff0c;把原本需要手动编写的底层…...

PagePlug核心功能深度解析:可视化建模与API集成完整指南

PagePlug核心功能深度解析&#xff1a;可视化建模与API集成完整指南 【免费下载链接】pageplug PagePlug是 Appsmith 的中国化项目&#xff0c;基于Appsmith做了整体性能的优化及汉化&#xff0c;也集合了特色表单解决方案Formily组件、图表解决方案Echarts组件、低代码小程序开…...

从HIDL到HAL3:手把手拆解Android相机Provider进程的通信与数据流转

Android相机架构深度解析&#xff1a;从HIDL到HAL3的数据流转与性能优化 在移动影像技术快速迭代的今天&#xff0c;Android相机系统的架构设计直接影响着成像质量与用户体验。作为连接应用层与硬件层的核心枢纽&#xff0c;Camera Provider进程通过HIDL接口与Camera Service通…...

第四章 数字孪生制作完整流程

4.1 项目需求分析、场景规划、页面布局设计数字孪生项目开发前期必须进行需求分析&#xff0c;明确项目用途、使用人群、展示内容以及功能模块&#xff0c;避免盲目开发造成资源浪费。需求分析是整个项目开发的逻辑起点&#xff0c;决定项目最终呈现效果。4.1.1 需求分析开发者…...

清华PPT模板:3分钟打造专业学术演示的终极指南

清华PPT模板&#xff1a;3分钟打造专业学术演示的终极指南 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为学术汇报、毕业答辩或重要演示的PPT设计而烦恼吗&#xff1f;清华PPT模板为你提供了完美的…...

Windows Cleaner:如何系统性地解决Windows磁盘空间管理难题

Windows Cleaner&#xff1a;如何系统性地解决Windows磁盘空间管理难题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服&#xff01; 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款基于Python和PyQt5框…...

【AI原生产品规划终极指南】:2026奇点大会PM必修的7大认知跃迁与3个落地陷阱规避法

AI原生产品规划&#xff1a;2026奇点智能技术大会产品经理必修课 更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从AI赋能到AI原生&#xff1a;一场范式革命的底层认知重构 传统AI赋能模式将模型作为工具嵌入既有系统——例如在CRM中调用NLP接口分析…...