Benutzerdefinierte Nutzertypen implementieren

In Android 11 wurde das Konzept der klar definierten Nutzertypen eingeführt, die alle verschiedenen Nutzertypen repräsentieren, die von der Android-Mehrfachnutzerfunktion zulässig sind. Mit dieser Funktion können OEMs vordefinierte AOSP-Nutzertypen anpassen und neue Profiltypen definieren. Weitere Informationen finden Sie im Abschnitt zu Nutzertypen.

Auf dieser Seite werden die Implementierungsrichtlinien beschrieben, die zum Anpassen von Nutzertypen erforderlich sind.

Personalisierung

Um AOSP-Nutzertypen anzupassen und neue Profiltypen zu definieren, muss der OEM config_user_types.xml mit den gewünschten Anpassungen überlagern. Die Datei config_user_types.xml enthält eine Referenzimplementierung und eine umfassende Liste konfigurierbarer Attribute.

Alle Attribute, z. B. default-restrictions, die in der Datei config_user_types.xml angegeben sind, überschreiben die AOSP-Standardeinstellungen. Für alle nicht angegebenen Attribute gilt der AOSP-Standard. Änderungen an den meisten Attributen, z. B. an den Kennzeichenattributen eines Profiltyps, wirken sich auf bereits vorhandene Nutzer dieses Nutzertyps aus. Da default-restrictions jedoch nur bei der Nutzererstellung angewendet werden, hat das Ändern dieses bestimmten Attributs, wenn die Datei config_user_types.xml von OTA geändert wird, keine Auswirkungen auf bereits vorhandene Nutzer. Die Angabe der maximalen Anzahl von Nutzern gilt ebenfalls nur beim Erstellen neuer Nutzer. Vorhandene Nutzer werden nicht entfernt.

Aktuelle Einschränkungen für die Anpassung der einzelnen Nutzertypen:

  • Profile können vollständig angepasst und definiert werden. In diesem Fall ist der OEM dafür verantwortlich, die erforderlichen Plattformänderungen vorzunehmen, damit sein benutzerdefiniertes Profil in Android unterstützt wird, da AOSP nur die vordefinierten AOSP-Nutzertypen unterstützt.
  • Nutzer mit uneingeschränkten Berechtigungen können nicht definiert und nur das Attribut default-restrictions angepasst werden.
  • Der Systemnutzer kann mit diesem Mechanismus nicht angepasst werden. In diesem Fall kann default-restrictions mit com.android.internal.R.array.config_defaultFirstUserRestrictions festgelegt werden. Weitere Informationen finden Sie unter config.xml.

Vorhandene Nutzertypen ändern

Vorhandene Nutzertypen können angepasst werden, indem ihre Attribute überschrieben werden, wie im folgenden Codebeispiel gezeigt:

<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>

In diesem Codebeispiel werden die folgenden AOSP-Nutzertypen durch Ändern der unterstützten Attribute angepasst:

  • Als Nutzer mit Vollzugriff android.os.usertype.full.SECONDARY:

    • Die Standardeinschränkung von no_sms ist auf „true“ festgelegt, indem default-restrictions no_sms="true" angegeben wird.
  • Profilnutzer android.os.usertype.profile.MANAGED:

    • Für jeden übergeordneten Nutzer sind zwei Profile zulässig. Legen Sie dazu max-allowed-per-parent='2' fest.
    • Für Badge-Attribute werden ausgewählte Werte mit icon-badge, badge-plain, badge-no-background, badge-labels und badge-colors festgelegt.
    • Die Standardeinschränkungen von no_sms und no_outgoing_calls werden durch Angabe von default-restrictions no_sms="true" no_outgoing_calls="true" auf „wahr“ gesetzt.

Die Bedeutung und die Standardwerte dieser Properties finden Sie unter UserTypeFactory.java und UserTypeDetails.java.

Benutzerdefinierte Profiltypen definieren

Im folgenden Codebeispiel wird gezeigt, wie neue benutzerdefinierte Profiltypen definiert werden:

<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>

In diesem Codebeispiel ist der Profiltyp com.example.profilename so definiert:

  • max-allowed-per-parents ist für zwei Profile pro Elternnutzer auf 2 festgelegt.

  • change-user-type: Konvertiert alle vorhandenen verwalteten Profile vom Typ android.os.usertype.profile.MANAGED in den neuen Typ com.example.profilename, wenn das Gerät über OTA von einer user-type-Version von <= 1 auf die neueste Version aktualisiert wird.