實現自定義用戶類型

Android 11 引入了定義明確的用戶類型的概念,代表了 Android 多用戶功能允許的所有不同類型的用戶。借助此功能,OEM 可以自定義預定義的 AOSP 用戶類型並定義新的配置文件類型。有關詳細信息,請參閱有關用戶類型的部分。

本頁詳細介紹了自定義用戶類型所需的實施指南。

定制

為了自定義 AOSP 用戶類型並定義新的配置文件類型,OEM 必須使用所需的自定義覆蓋config_user_types.xmlconfig_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-badgebadge-plainbadge-no-backgroundbadge-labelsbadge-colors將徽章屬性設置為所需的值。
    • no_smsno_outgoing_calls的默認限制通過指定default-restrictions no_sms="true" no_outgoing_calls="true"

有關這些屬性的含義和默認值,請參閱UserTypeFactory.javaUserTypeDetails.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 從<= 1user-type版本升級設備時,將所有現有的android.os.usertype.profile.MANAGED類型的託管配置文件轉換為新的com.example.profilename類型。