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类型。