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僅在創建用戶時應用,因此修改此特定屬性(如果 OTA 更改config_user_types.xml文件)對預先存在的用戶沒有影響。同樣,指定最大用戶數僅適用於創建新用戶時;現有用戶不會被刪除。
每種用戶類型的當前自定義限制如下:
- 配置文件可以完全定制和定義。在這種情況下,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:-
no_sms的默認限制通過指定default-restrictions no_sms="true"設置為 true。
-
配置文件用戶
android.os.usertype.profile.MANAGED:- 通過設置
max-allowed-per-parent='2'為每個父用戶允許兩個配置文件。 - 使用
icon-badge、badge-plain、badge-no-background、badge-labels、badge-colors將徽章屬性設置為所需的值。 -
no_sms和no_outgoing_calls的默認限制通過指定default-restrictions no_sms="true" 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 從<= 1的user-type版本升級設備時,將所有現有的android.os.usertype.profile.MANAGED類型的託管配置文件轉換為新的com.example.profilename類型。