實現自定義用戶類型

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

    • 透過指定default-restrictions no_sms="true"no_sms的預設限制設為 true 。
  • 設定檔使用者android.os.usertype.profile.MANAGED

    • 透過設定max-allowed-per-parent='2'允許每個父用戶使用兩個設定檔。
    • 使用icon-badgebadge-plainbadge-no-backgroundbadge-labelsbadge-colors將徽章屬性設定為所需的值。
    • 透過指定 default-restrictions default-restrictions no_sms="true" no_outgoing_calls="true"no_smsno_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類型。