安卓多用户管理之IUserManager.AIDL

发布时间:2024年01月10日

目录


前言

IUserManager.AIDL是一个接口,内部定义了很多用户管理的API,它的真正实现类是UserManagerService,在了解UserManagerService之前,先总览一下IUserManager.AIDL定义了哪些API,对其进行一个大概分类及简介。
版本信息:Android11


一、API接口功能简介

1.1 创建用户

1.1.1 创建一个新的用户

UserInfo createUserWithThrow(in String name, in String userType, int flags);
作用:通过此方法创建一个新的用户。
参数:
name:新用户的名称。
userType:用户类型。
flags:标志位,用于指定创建用户时的一些特性。
返回值:返回一个 UserInfo 对象,包含了新创建用户的信息。

1.1.2 预创建一个新的用户,但不立即激活

UserInfo preCreateUserWithThrow(in String userType);
作用:预创建一个新的用户,但不立即激活。
参数:
userType:用户类型。
返回值:返回一个 UserInfo 对象,包含了新创建用户的信息。

1.2 创建用户配置文件

1.2.1 创建一个配置文件

UserInfo createProfileForUserWithThrow(in String name, in String userType, int flags, int userId, in String[] disallowedPackages);
作用:为指定的用户创建一个配置文件。
参数:
name:配置文件的名称。
userType:用户类型。
flags:标志位,用于指定创建配置文件时的一些特性。
userId:指定的用户 ID。
disallowedPackages:不允许在配置文件中安装的应用程序包名数组。
返回值:返回一个 UserInfo 对象,包含了新创建配置文件的信息。

1.2.2 创建一个受限配置文件

UserInfo createRestrictedProfileWithThrow(String name, int parentUserHandle);
作用:为指定的用户创建一个受限配置文件。
参数:
name:受限配置文件的名称。
parentUserHandle:父用户的用户句柄。
返回值:返回一个 UserInfo 对象,包含了新创建受限配置文件的信息。

1.2.3 即使被禁止也为用户创建配置文件

UserInfo createProfileForUserEvenWhenDisallowedWithThrow(String name, String userType, int flags, int userId, String[] disallowedPackages);
作用:即使被禁止也为用户创建配置文件。
参数:
name - 配置文件名称。
userType - 用户类型。
flags - 标志位。
userId - 用户 ID。
disallowedPackages - 被禁止的包名数组。
返回值:返回一个 UserInfo 对象,包含了新创建的配置文件用户的信息。

1.3 指定、设置用户信息

1.3.1 设置用户的名称

void setUserName(int userId, String name);
作用:设置指定用户的名称。
参数:
userId:指定用户的用户 ID。
name:用户的新名称。

1.3.2 设置用户的图标

void setUserIcon(int userId, in Bitmap icon);
作用:设置指定用户的图标。
参数:
userId:指定用户的用户 ID。
icon:用户的新图标。

1.3.3 设置指定用户的用户账户名称

void setUserAccount(int userId, String accountName);
作用:设置指定用户的用户账户名称。
参数:
userId:指定用户的用户 ID。
accountName:要设置的用户账户名称。
返回值:无。

1.3.4 设置指定用户的用户限制

void setUserRestriction(String key, boolean value, int userId);
作用:设置指定用户的用户限制。
参数:
key:限制键值。
value:限制的值。
userId:指定用户的用户 ID。
返回值:无。

1.3.5 设置指定应用程序的限制

void setApplicationRestrictions(String packageName, Bundle restrictions, int userId);
作用:设置指定应用程序的限制。
参数:
packageName:应用程序包名。
restrictions:限制的 Bundle 对象。
userId:指定用户的用户 ID。
返回值:无。

1.3.6 启用指定用户

void setUserEnabled(int userId);
作用:启用指定用户。
参数:
userId:指定用户的用户 ID。

1.3.7 将指定用户设置为管理员用户

void setUserAdmin(int userId);
作用:将指定用户设置为管理员用户。
参数:
userId:指定用户的用户 ID。

1.3.9 清除指定用户的凭证加密密钥

void evictCredentialEncryptionKey(int userId);
作用:清除指定用户的凭证加密密钥。
参数:
userId:指定用户的用户 ID。

1.3.10 移除指定用户

boolean removeUser(int userId);
作用:移除指定用户。
参数:
userId:指定用户的用户 ID。
返回值:如果成功移除用户,则返回 true;否则返回 false。

1.3.11 即使被禁止,也移除指定用户

boolean removeUserEvenWhenDisallowed(int userId);
作用:即使被禁止,也移除指定用户。
参数:
userId:指定用户的用户 ID。
返回值:如果成功移除用户,则返回 true;否则返回 false。

1.3.12 添加用户限制监听器

void addUserRestrictionsListener(IUserRestrictionsListener listener);
作用:添加用户限制监听器。
参数:
listener:用户限制监听器对象。
返回值:无。

1.3.13 设置默认访客用户的限制

void setDefaultGuestRestrictions(Bundle restrictions);
作用:设置默认访客用户的限制。
参数:
restrictions:默认访客用户的限制 Bundle 对象。
返回值:无。

1.3.14 标记访客用户以便删除

boolean markGuestForDeletion(int userId);
作用:标记访客用户以便删除。
参数:userId - 用户 ID。
返回值:如果成功标记访客用户以便删除,则返回 true;否则返回 false。

1.3.15 请求启用/禁用静默模式

boolean requestQuietModeEnabled(String callingPackage, boolean enableQuietMode, int userId, IntentSender target, int flags);
作用:请求启用/禁用静默模式。
参数:
callingPackage - 调用方包名。
enableQuietMode - 是否启用静默模式。
userId - 用户 ID。
target - 目标 IntentSender。
flags - 标志位。
返回值:返回一个布尔值,表示请求是否成功。

1.4 获取用户信息

1.4.1 获取用户的图标

ParcelFileDescriptor getUserIcon(int userId);
作用:获取指定用户的图标。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 ParcelFileDescriptor 对象,包含了用户的图标信息。

1.4.2 获取主用户的信息

UserInfo getPrimaryUser();
作用:获取主用户的信息。
返回值:返回一个 UserInfo 对象,包含了主用户的信息。

1.4.3 获取用户列表

List < UserInfo> getUsers(boolean excludePartial, boolean excludeDying, boolean excludePreCreated);
作用:获取用户列表。
参数:
excludePartial:是否排除部分用户。
excludeDying:是否排除即将被移除的用户。
excludePreCreated:是否排除预创建的用户。
返回值:返回一个 UserInfo 对象列表,包含了符合条件的用户信息。

1.4.4 获取用户的配置文件列表

List getProfiles(int userId, boolean enabledOnly);
作用:获取指定用户的配置文件列表。
参数:
userId:指定用户的用户 ID。
enabledOnly:是否只包含已启用的配置文件。
返回值:返回一个 UserInfo 对象列表,包含了符合条件的配置文件信息。

1.4.5 获取用户的配置文件 ID 列表

int[] getProfileIds(int userId, boolean enabledOnly);
作用:获取指定用户的配置文件 ID 列表。
参数:
userId:指定用户的用户 ID。
enabledOnly:是否只包含已启用的配置文件。
返回值:返回一个整型数组,包含了符合条件的配置文件 ID。

1.4.6 获取用户的配置文件的父用户信息

UserInfo getProfileParent(int userId);
作用:获取指定用户的配置文件的父用户信息。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 UserInfo 对象,包含了配置文件的父用户信息。

1.4.7 获取用户的创建时间

long getUserCreationTime(int userId);
作用:获取指定用户的创建时间。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的创建时间,以毫秒为单位的时间戳。

1.4.8 获取指定用户的信息

UserInfo getUserInfo(int userId);
作用:获取指定用户的信息。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 UserInfo 对象,包含了指定用户的信息。

1.4.9 获取指定用户的序列号

int getUserSerialNumber(int userId);
作用:获取指定用户的序列号。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的序列号。

1.4.10 获取指定应用程序的限制

Bundle getApplicationRestrictions(String packageName);
作用:获取指定应用程序的限制。
参数:
packageName:应用程序包名。
返回值:返回一个 Bundle 对象,包含了指定应用程序的限制。

1.4.11 获取指定用户的指定应用程序的限制

Bundle getApplicationRestrictionsForUser(String packageName, int userId);
作用:获取指定用户的指定应用程序的限制。
参数:
packageName:应用程序包名。
userId:指定用户的用户 ID。
返回值:返回一个 Bundle 对象,包含了指定用户的指定应用程序的限制。

1.4.12 根据用户序列号获取用户 ID

int getUserHandle(int userSerialNumber);
作用:根据用户序列号获取用户 ID。
参数:
userSerialNumber:用户的序列号。
返回值:返回指定用户序列号对应的用户 ID。

1.4.13 获取指定用户的用户账户名称

String getUserAccount(int userId);
作用:获取指定用户的用户账户名称。
参数:
userId:指定用户的用户 ID。
返回值:返回指定用户的用户账户名称。

1.4.14 获取指定用户受限制的限制源

int getUserRestrictionSource(String restrictionKey, int userId);
作用:获取指定用户受限制的限制源。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:返回指定用户受限制的限制源。

1.4.15 获取指定用户受限制的限制源列表

List<UserManager.EnforcingUser> getUserRestrictionSources(String restrictionKey, int userId);
作用:获取指定用户受限制的限制源列表。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:返回一个 UserManager.EnforcingUser 对象列表,包含了指定用户受限制的限制源列表。

1.4.16 获取指定用户的限制

Bundle getUserRestrictions(int userId);
作用:获取指定用户的限制。
参数:
userId:指定用户的用户 ID。
返回值:返回一个 Bundle 对象,包含了指定用户的限制。

1.4.17 获取当前用户的用户名

String getUserName();
作用:获取当前用户的用户名。
返回值:返回当前用户的用户名。

1.4.18 获取默认访客用户的限制

Bundle getDefaultGuestRestrictions();
作用:获取默认访客用户的限制。
参数:无。
返回值:返回一个 Bundle 对象,包含了默认访客用户的限制。

1.4.19 获取用户启动的实时时间

long getUserStartRealtime();
作用:获取用户启动的实时时间。
返回值:返回用户启动的实时时间。

1.4.20 获取用户解锁的实时时间

long getUserUnlockRealtime();
作用:获取用户解锁的实时时间。
返回值:返回用户解锁的实时时间。

1.5 检查用户相关信息

1.5.1 检查是否可以向指定用户添加更多配置文件

boolean canAddMoreProfilesToUser(in String userType, int userId, boolean allowedToRemoveOne);
作用:检查是否可以向指定用户添加更多配置文件。
参数:
userType:用户类型。
userId:指定用户的用户 ID。
allowedToRemoveOne:是否允许移除一个配置文件以添加更多。
返回值:如果可以向指定用户添加更多配置文件,则返回 true;否则返回 false。

1.5.2 检查是否可以向指定用户添加更多受管理的配置文件

boolean canAddMoreManagedProfiles(int userId, boolean allowedToRemoveOne);
作用:检查是否可以向指定用户添加更多受管理的配置文件。
参数:
userId:指定用户的用户 ID。
allowedToRemoveOne:是否允许移除一个配置文件以添加更多。
返回值:如果可以向指定用户添加更多受管理的配置文件,则返回 true;否则返回 false。

1.5.3 检查两个用户是否属于同一个配置文件组

boolean isSameProfileGroup(int userId, int otherUserHandle);
作用:检查两个用户是否属于同一个配置文件组。
参数:
userId:第一个用户的用户 ID。
otherUserHandle:第二个用户的用户 ID。
返回值:如果两个用户属于同一个配置文件组,则返回 true;否则返回 false。

1.5.4 检查指定用户是否具有基本用户限制

boolean hasBaseUserRestriction(String restrictionKey, int userId);
作用:检查指定用户是否具有基本用户限制。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:如果指定用户具有指定的基本用户限制,则返回 true;否则返回 false。

1.5.5 检查指定用户是否属于指定的用户类型

boolean isUserOfType(int userId, in String userType);
作用:检查指定用户是否属于指定的用户类型。
参数:
userId:指定用户的用户 ID。
userType:用户类型。
返回值:如果指定用户属于指定的用户类型,则返回 true;否则返回 false。

1.5.6 检查指定用户是否具有用户限制

boolean hasUserRestriction(String restrictionKey, int userId);
作用:检查指定用户是否具有用户限制。
参数:
restrictionKey:限制键值。
userId:指定用户的用户 ID。
返回值:如果指定用户具有指定的用户限制,则返回 true;否则返回 false。

1.5.7 检查任何用户是否具有指定的用户限制

boolean hasUserRestrictionOnAnyUser(String restrictionKey);
作用:检查任何用户是否具有指定的用户限制。
参数:
restrictionKey:限制键值。
返回值:如果任何用户具有指定的用户限制,则返回 true;否则返回 false。

1.5.8 检查当前用户是否受到限制

boolean isRestricted();
作用:检查当前用户是否受到限制。
参数:无。
返回值:如果当前用户受到限制,则返回 true;否则返回 false。

1.5.9 检查指定用户对于指定设置是否受限制

boolean isSettingRestrictedForUser(String setting, int userId, String value, int callingUid);
作用:检查指定用户对于指定设置是否受限制。
参数:
setting:设置名称。
userId:指定用户的用户 ID。
value:设置的值。
callingUid:调用者的 UID。
返回值:如果指定用户对于指定设置受到限制,则返回 true;否则返回 false。

1.5.10 查指定用户是否可以拥有受限制的配置文件

boolean canHaveRestrictedProfile(int userId);
作用:检查指定用户是否可以拥有受限制的配置文件。
参数:
userId:指定用户的用户 ID。
返回值:如果指定用户可以拥有受限制的配置文件,则返回 true;否则返回 false。

1.5.11 检查指定用户是否为演示用户

boolean isDemoUser(int userId);
作用:检查指定用户是否为演示用户。
参数:userId - 用户 ID。
返回值:如果指定用户是演示用户,则返回 true;否则返回 false。

1.5.12 检查指定用户是否为托管配置文件用户

boolean isManagedProfile(int userId);
作用:检查指定用户是否为托管配置文件用户。
参数:userId - 用户 ID。
返回值:如果指定用户是托管配置文件用户,则返回 true;否则返回 false。

1.5.13 检查指定用户是否为预创建用户

boolean isPreCreated(int userId);
作用:检查指定用户是否为预创建用户。
参数:userId - 用户 ID。
返回值:如果指定用户是预创建用户,则返回 true;否则返回 false。

1.5.14 检查指定用户是否启用了安静模式

boolean isQuietModeEnabled(int userId);
作用:检查指定用户是否启用了安静模式。
参数:userId - 用户 ID。
返回值:如果指定用户启用了安静模式,则返回 true;否则返回 false。

1.5.15 检查指定用户是否正在解锁或已解锁

boolean isUserUnlockingOrUnlocked(int userId);
作用:检查指定用户是否正在解锁或已解锁。
参数:userId - 用户 ID。
返回值:如果指定用户正在解锁或已解锁,则返回 true;否则返回 false。

1.5.16 检查指定用户是否为配置文件用户

boolean isProfile(int userId);
作用:检查指定用户是否为配置文件用户。
参数:userId - 用户 ID。
返回值:如果指定用户是配置文件用户,则返回 true;否则返回 false。

1.5.17 检查指定用户是否已解锁

boolean isUserUnlocked(int userId);
作用:检查指定用户是否已解锁。
参数:userId - 用户 ID。
返回值:如果指定用户已解锁,则返回 true;否则返回 false。

1.5.17 查找当前的访客用户信息

UserInfo findCurrentGuestUser();
作用:查找当前的访客用户信息。
返回值:返回一个 UserInfo 对象,包含当前访客用户的信息。

1.5.18 检查指定用户是否正在运行

boolean isUserRunning(int userId);
作用:检查指定用户是否正在运行。
参数:userId - 用户 ID。
返回值:如果指定用户正在运行,则返回 true;否则返回 false。

1.5.19 检查指定用户是否已设置用户名

boolean isUserNameSet(int userId);
作用:检查指定用户是否已设置用户名。
参数:userId - 用户 ID。
返回值:如果指定用户已设置用户名,则返回 true;否则返回 false。

1.5.20 检查是否存在受限制的配置文件

boolean hasRestrictedProfiles();
作用:检查是否存在受限制的配置文件。
返回值:如果存在受限制的配置文件,则返回 true;否则返回 false。

1.6 种子账户相关

1.6.1 设置种子账户数据

void setSeedAccountData(int userId, String accountName, String accountType, PersistableBundle accountOptions, boolean persist);
作用:设置种子账户数据。
参数:
userId - 用户 ID。
accountName - 账户名称。
accountType - 账户类型。
accountOptions - 账户选项的 PersistableBundle 对象。
persist - 是否持久化数据。
返回值:无。

1.6.2 获取种子账户的账户名称

String getSeedAccountName();
作用:获取种子账户的账户名称。
返回值:返回种子账户的账户名称。

1.6.3 获取种子账户的账户类型

String getSeedAccountType();
作用:获取种子账户的账户类型。
返回值:返回种子账户的账户类型。

1.6.4 获取种子账户的账户选项

PersistableBundle getSeedAccountOptions();
作用:获取种子账户的账户选项。
返回值:返回一个 PersistableBundle 对象,包含了种子账户的账户选项。

1.6.5 清除种子账户数据

void clearSeedAccountData();
作用:清除种子账户数据。
返回值:无。

1.6.6 检查是否有用户拥有指定的种子账户

boolean someUserHasSeedAccount(String accountName, String accountType);
作用:检查是否有用户拥有指定的种子账户。
参数:
accountName - 账户名称。
accountType - 账户类型。
返回值:如果有用户拥有指定的种子账户,则返回 true;否则返回 false。

1.7 用户徽章资源相关

1.7.1 获取用户图标徽章资源 ID

int getUserIconBadgeResId(int userId);
作用:获取用户图标徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户图标徽章资源的 ID。

1.7.2 获取用户徽章资源 ID

int getUserBadgeResId(int userId);
作用:获取用户徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章资源的 ID。

1.7.3 获取用户无背景的徽章资源 ID

int getUserBadgeNoBackgroundResId(int userId);
作用:获取用户无背景的徽章资源 ID。
参数:userId - 用户 ID。
返回值:返回用户无背景的徽章资源的 ID。

1.7.4 获取用户徽章标签资源 ID

int getUserBadgeLabelResId(int userId);
作用:获取用户徽章标签资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章标签资源的 ID。

1.7.5 获取用户徽章颜色资源 ID

int getUserBadgeColorResId(int userId);
作用:获取用户徽章颜色资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章颜色资源的 ID。

1.7.6 获取用户徽章深色颜色资源 ID

int getUserBadgeDarkColorResId(int userId);
作用:获取用户徽章深色颜色资源 ID。
参数:userId - 用户 ID。
返回值:返回用户徽章深色颜色资源的 ID。

1.7.7 检查指定用户是否有徽章

boolean hasBadge(int userId);
作用:检查指定用户是否有徽章。
参数:userId - 用户 ID。
返回值:如果指定用户有徽章,则返回 true;否则返回 false。

二、配置文件、种子账户、用户徽章简介

2.1 配置文件

在 Android 多用户环境中,每个用户都有自己的用户配置文件信息,这些信息包括用户的个人设置、应用程序数据、权限等。用户配置文件信息通常存储在设备的内部存储器中,每个用户的配置文件信息都是相互隔离的,以确保用户之间的数据不会相互干扰。
用户配置文件信息通常包括以下内容:
个人设置:每个用户可以自定义设备的个人设置,例如壁纸、铃声、语言偏好等。这些设置信息存储在用户的配置文件中,并在用户登录时加载。
应用程序数据:每个用户安装的应用程序的数据和设置信息都存储在其个人的配置文件中。这包括应用程序的用户偏好、登陆信息、游戏进度等。
权限:Android 系统会根据用户的配置文件信息来管理应用程序的权限。不同用户的权限设置是相互独立的,这样可以确保用户之间的数据安全和隐私。
存储空间:每个用户的配置文件信息占用设备的存储空间,Android 系统会对每个用户的存储空间进行分配和管理,以确保用户之间的数据不会相互干扰。
安全设置:每个用户的安全设置信息,例如锁屏密码、指纹识别等,都存储在其个人的配置文件中。
Android 系统会根据用户登录时的身份加载相应的配置文件信息,以确保用户能够获得自己的个人设置和数据。这种多用户的配置文件信息的隔离设计,有助于保护用户的隐私和数据安全。

2.2 种子账户

在 Android 系统中,种子账户是指系统预置的用户账户,通常用于设备的初始化设置或者系统自身的运行。这些种子账户通常不允许用户直接登录或进行操作,而是由系统进行管理和控制。种子账户通常包括以下几种类型:
系统账户:这是 Android 系统内置的账户,用于管理设备的核心功能和服务,例如系统更新、安全策略、应用商店等。
默认用户账户:在设备首次启动时创建的用户账户,通常作为设备的主要用户账户。默认用户账户具有较高的权限,可以对设备进行全面的管理和操作。
Guest 账户:这是一个临时的访客账户,用于临时借给其他人使用设备而不会影响到主要用户账户的数据和设置。
Restricted Profile 账户:这是一个受限制的配置文件,用于限制某些功能和内容的访问权限,通常用于设备共享或家庭使用,以保护隐私和安全。

2.3 用户徽章

在 Android 多用户环境中,每个用户都可以有自己的用户徽章。用户徽章是一个图标,用于表示用户的身份或状态。在多用户环境下,用户徽章可以帮助用户快速识别当前处于哪个用户账户下,以及该用户账户的状态。用户徽章通常显示在设备的锁屏界面、通知栏、快速设置面板等位置

三、总结

IUserManager.AIDL 是 Android 系统中的一个特定接口,用于管理用户和用户相关的操作。它包含了一系列方法,可以用于创建、删除、查询用户信息,以及管理用户的权限和配置等操作。通过 IUserManager.AIDL 接口,应用程序可以与系统 UserManager 服务进行通信,实现对用户账户的管理和控制。

文章来源:https://blog.csdn.net/qq_45649553/article/details/135402906
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。