支持多用户

通过分离用户帐号和应用数据,Android 支持在一台 Android 设备上添加多个用户。例如,父母可能会允许他们的孩子使用家庭平板电脑,一个家庭可以共用一辆汽车,或者应急响应团队可能会共用一台移动设备用于呼叫值班。

术语

Android 在描述 Android 用户和帐号时会使用以下术语。

常规

Android 设备管理使用以下常规术语。

  • 用户:每个用户意指一个自然人。每个用户都有不同的应用数据和一些独特的设置,以及可在多个用户之间明确切换的用户界面。当某个用户处于活动状态时,另一个用户可以在后台运行;系统会在适当的时候尝试关闭用户来节约资源。次要用户可以通过界面直接创建,也可以通过设备管理应用进行创建。
  • 帐号:帐号包含在用户中,但并非由某个用户定义;用户既不由任何特定帐号进行定义,也不会关联到任何特定帐号。用户和个人资料包含其各自的唯一帐号;不过,即使没有用户和个人资料,帐号也可以正常发挥作用。帐号列表因用户而异。如需了解详情,请参阅 Account 类的定义。
  • 个人资料:个人资料具有独立的应用数据,但会共享一些系统范围内的设置(例如 WLAN 和蓝牙)。个人资料会与已存在用户绑定在一起,并是已存在用户的子集。一个用户可以有多份个人资料。个人资料通过设备管理应用进行创建。个人资料由创建个人资料的用户进行定义,它与父用户之间总是存在不可变的关联。个人资料的存在时间不会超出创建用户的生命周期。
  • 应用:应用的数据存在于各关联用户中。一个应用的数据与同一用户的其他应用的数据以沙盒的形式隔离。同一用户的应用可以通过 IPC 彼此交互。如需了解详情,请参阅Android 企业版

用户类别

Android 设备管理使用以下用户类别。

  • 系统用户:添加到设备的第一个用户。除非恢复出厂设置,否则无法移除系统用户;此外,即使其他用户在前台运行,系统用户也会始终处于运行状态。该用户还拥有特殊权限以及只有自己可以调整的设置。
  • 次要用户:除系统用户之外添加到设备的任何用户。次要用户可以移除(由次要用户自行移除或由管理员用户移除),且不会影响设备上的其他用户。此类用户可以在后台运行,在后台运行时可以继续连接到网络。
  • 访客用户:临时的次要用户。访客用户设置中有明确的删除选项,当访客用户不再有用时,可快速将其删除。一次只能有一个访客用户。
  • 管理员用户:有权创建和移除其他用户以及控制一些常规多用户设置的用户。默认情况下,只有系统用户属于管理员用户。

个人资料类别

Android 设备管理使用以下个人资料类别。

  • 受管理个人资料:由应用创建,包含工作数据和应用。受管理个人资料专门由个人资料所有者(即创建企业资料的应用)管理。启动器、通知和最近的任务由父用户和企业资料共享。
  • 受限个人资料:由父用户控制的帐号,父用户可以控制哪些应用在受限个人资料中可用。仅适用于平板电脑和电视设备。

用户类型

Android 11 已将上述用户和个人资料分类归纳为定义明确的用户类型,用于代表 Android 多用户功能允许使用的各种不同类型的用户和个人资料。

预定义的 AOSP 用户类型在 frameworks/base/core/java/android/os/UserManager.java 中定义,目前包括:

  • android.os.usertype.full.SYSTEM
  • android.os.usertype.full.SECONDARY
  • android.os.usertype.full.GUEST
  • android.os.usertype.full.DEMO
  • android.os.usertype.full.RESTRICTED
  • android.os.usertype.profile.MANAGED
  • android.os.usertype.system.HEADLESS

原始设备制造商 (OEM) 可以通过覆盖 frameworks/base/core/res/res/xml/config_user_types.xml 文件来配置这些用户类型。这有助于更改每种用户类型的默认配置,包括其默认限制、图标、标记和允许配置的最大用户数。

除了可配置的 AOSP 用户类型外,OEM 还可以使用 frameworks/base/core/res/res/xml/config_user_types.xml 文件定义新的个人资料类型。这样,OEM 如有需要,就可以引入自己的非受管理个人资料类型。不过,OEM 有责任根据支持所做更改的需要对平台进行修改,包括修改用于检查受管理个人资料的任何代码,使其现在可以根据情况处理新的个人资料类型。

支持多用户

从 Android 5.0 开始,多用户功能默认处于停用状态。如需启用这项功能,设备制造商必须定义一个资源叠加层,以替换 frameworks/base/core/res/res/values/config.xml 中的以下值:

<!--  Maximum number of supported users -->
<integer name="config_multiuserMaximumUsers">1</integer>
<!--  Whether Multiuser UI should be shown -->
<bool name="config_enableMultiUserUI">false</bool>

如需应用此叠加层并在设备上启用访客用户和次要用户,请使用 Android 构建系统的 DEVICE_PACKAGE_OVERLAYS 功能执行以下操作:

  • config_multiuserMaximumUsers 的值替换为大于 1 的值
  • config_enableMultiUserUI 的值替换为 true

设备制造商可以决定用户数上限。如果设备制造商或其他人修改了设置,他们必须确保短信和电话通讯遵循 Android 兼容性定义文档 (CDD) 中定义的说明。

管理多用户

程序化地调用 DevicePolicyManager 类中的 API 的应用负责管理用户和个人资料(受限个人资料除外),并对用户和个人资料的使用加以限制。

学校和企业可以将上述类型与 UserManager API 结合使用,以针对其用例构建独特的解决方案,从而借助用户和个人资料来管理设备上应用和数据的生命周期和适用范围。

多用户系统行为

将用户添加到设备后,当其他用户在前台活动时,一些功能会受限制。由于应用数据会按用户分开,因此,这些应用的状态也会因用户而异。例如,如果某个用户当前不在前台,那么在该用户及其帐号在设备上处于活动状态之前,发往该用户帐号的电子邮件将无法查看。

默认情况下,只有系统用户拥有电话和短信的完全访问权限。次要用户可以接听来电,但不能收发短信。管理员用户必须为其他用户启用这些功能,他们才能使用这些功能。

注意:如需为次要用户启用或停用电话和短信功能,请依次转到“设置”>“用户”,选择相应用户,然后将“允许接打电话和收发短信”设置切换到关闭状态。

次要用户在后台活动时会受到一些限制。例如,后台次要用户无法显示界面或开启蓝牙服务。此外,如果设备需要更多内存才能满足前台用户的操作需求,系统进程将暂停后台次要用户的活动。

在 Android 设备上使用多用户功能时,请注意以下几点:

  • 通知会同时出现在一位用户的所有帐号中。
  • 其他用户的通知在激活用户后才会显示。
  • 每位用户都会获得用于安装和放置应用的工作区。
  • 任何用户都无权访问其他用户的应用数据。
  • 任何用户都可以影响为所有用户安装的应用。
  • 管理员用户可以移除次要用户所创建的应用乃至整个工作区。

Android 7.0 具备一些增强功能,包括:

  • 切换工作资料。用户可以停用其受管理个人资料(例如,在不工作时)。这项功能可以通过停止用户来实现;UserManagerService 会调用 ActivityManagerNative#stopUser()
  • 始终开启的 VPN:VPN 应用现在可以由用户、设备政策控制器 (DPC) 或受管理个人资料 DPC(仅适用于受管理个人资料应用)设为始终开启。启用后,应用将无法访问公共网络(在连接 VPN 且连接可以通过它正常路由前,无法访问网络资源)。报告 device_admin 的设备必须实现始终开启的 VPN。

如需详细了解 Android 7.0 设备管理功能,请参阅 Android for Work

Android Automotive 多用户

Android Automotive 依靠 Android 的多用户实现来提供共用设备体验。

Automotive 用户类型

值得注意的是,除了上面列出的用户类型之外,Automotive 版本还包含以下类型的用户:

  • 无头系统用户:此类系统用户负责托管所有系统服务。如需在 Automotive 中支持多用户,系统用户也必须是无头用户。只有一个无头用户。无头系统用户应遵守以下要求:
    • 必须始终在后台运行。
    • 无法直接由用户移除或访问,除非是在“设备配置”的情况下。例如,用户无法切换到这种用户类型来执行下载应用或添加帐号等任务。
    • 只能通过恢复出厂设置清除。
  • 常规用户:与上文所述的次要用户相同,不过次要用户具有以下特点:
    • 不会在后台运行(在切换成其他用户之后)。
    • 可通过界面直接创建。
    • 具有独立的应用数据,但会共享一些系统范围内的设置。例如,WLAN 和蓝牙。

注意事项

以下例外情况适用于 Automotive 中的无头系统用户和常规(次要)用户:

  • 无头系统用户不支持工作资料。
  • 默认情况下,常规(次要)用户拥有通话和短信的完全访问权限。
  • 默认情况下,常规(次要)用户不会在后台运行。

启用无头系统用户

从 Android 10 开始,多用户功能可用于 Automotive 用例。重要区别包括:

  • 系统用户是无头用户,仅在后台运行。
  • 人类用户不与系统用户互动。

如需启用无头系统用户,设备制造商必须按照上文所述启用多用户功能。

启用无头用户后:
  1. 如需将设备声明为 Automotive,请添加 android.hardware.type.automotive 功能。
  2. ro.fw.headless_system_user 设为 true
  3. config_multiuserMaximumUsers 的值设为 2(或更高的值)。

如需了解详情,请参阅 Automotive 中的多用户支持