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