Android 11 引入了定义明确的用户类型概念,用于表示 Android 多用户功能所允许的各种不同类型的用户。借助此功能,OEM 可以自定义预定义的 AOSP 用户类型,并定义新的个人资料类型。如需了解详情,请参阅有关用户类型的部分。
本页详细介绍了自定义用户类型所需的实现准则。
自定义
为了自定义 AOSP 用户类型并定义新的个人资料类型,OEM 必须使用首选的自定义设置叠加 config_user_types.xml。config_user_types.xml 文件包含参考实现和完整的可配置属性列表。
在 config_user_types.xml 文件中指定的任何属性(如 default-restrictions)都会覆盖 AOSP 默认值。任何未指定的属性都遵循 AOSP 默认设置。更改大多数属性(例如个人资料类型的标志属性)都会影响该用户类型的现有用户。但是,由于 default-restrictions 仅在创建用户时应用,因此如果 config_user_types.xml 文件通过 OTA 进行更改,则修改此特定属性不会影响现有用户。同样,仅在创建新用户时指定最大用户数;不会移除现有用户。
各类用户当前的自定义限制如下:
- 您可以对个人资料进行完全自定义和定义。在这种情况下,OEM 负责根据需要进行平台修改,以确保 Android 支持其自定义个人资料,因为 AOSP 仅支持预定义的 AOSP 用户类型。
- 不能指定完整权限用户,只能自定义其 default-restrictions属性。
- 无法使用此机制自定义系统用户。在这种情况下,可以使用 com.android.internal.R.array.config_defaultFirstUserRestrictions设置default-restrictions。如需了解详情,请参阅config.xml。
修改现有用户类型
您可以替换现有用户类型的属性来对其进行自定义,如以下代码示例所示:
<user-types version="0">
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions no_sms="true" />
    </full-type>
    <profile-type
        name='android.os.usertype.profile.MANAGED'
        max-allowed-per-parent='2'
        icon-badge='@android:drawable/ic_corp_icon_badge_case'
        badge-plain='@android:drawable/ic_corp_badge_case'
        badge-no-background='@android:drawable/ic_corp_badge_no_background' >
        <badge-labels>
            <item res='@android:string/managed_profile_label_badge' />
            <item res='@android:string/managed_profile_label_badge_2' />
        </badge-labels>
        <badge-colors>
            <item res='@android:color/profile_badge_1' />
            <item res='@android:color/profile_badge_2' />
        </badge-colors>
        <default-restrictions no_sms="true" no_outgoing_calls="true" />
    </profile-type>
</user-types>
在此代码示例中,以下 AOSP 用户类型通过修改支持的属性进行自定义:
- 完整权限用户 - android.os.usertype.full.SECONDARY:- 通过指定 default-restrictions no_sms="true",将no_sms的默认限制设置为 true。
 
- 通过指定 
- 个人资料用户 - android.os.usertype.profile.MANAGED:- 通过设置 max-allowed-per-parent='2',允许每个父用户使用两个个人资料用户。
- 标志属性使用 icon-badge、badge-plain、badge-no-background、badge-labels、badge-colors设置为所选值。
- 通过指定 default-restrictions no_sms="true" no_outgoing_calls="true",将no_sms和no_outgoing_calls的默认限制设置为 true。
 
- 通过设置 
如需了解这些属性的含义和默认值,请参阅 UserTypeFactory.java 和 UserTypeDetails.java。
定义自定义个人资料类型
以下代码示例展示了如何定义新的自定义个人资料类型:
<user-types version="1">
    <profile-type
        name="com.example.profilename"
        max-allowed-per-parent="2" />
    <change-user-type
        from="android.os.usertype.profile.MANAGED"
        to="com.example.profilename"
        whenVersionLeq="1" />
</user-types>
在此代码示例中,com.example.profilename 个人资料类型的定义如下:
- max-allowed-per-parents设为- 2,每个父用户包含两份个人资料。
- change-user-type:当通过 OTA 从- user-type版本的- <= 1升级设备时,将所有现有的- android.os.usertype.profile.MANAGED类型的受管理个人资料转换为新的- com.example.profilename类型。
