支援多用戶

Android 透過分離使用者帳戶和應用程式資料來支援單一 Android 裝置上的多個使用者。例如,父母可以允許他們的孩子使用家庭平板電腦,家庭可以共享一輛汽車,或者關鍵響應團隊可以共享行動裝置來執行值班任務。

術語

Android 在描述 Android 用戶和帳戶時使用以下術語。

一般的

Android 裝置管理使用以下通用術語:

  • 使用者:每個使用者旨在由不同的自然人使用。每個用戶都有不同的應用程式資料和一些獨特的設置,以及用於在用戶之間明確切換的用戶介面。當另一個使用者處於活動狀態時,一個使用者可以在背景執行;系統會在適當的時候管理關閉使用者以節省資源。可以直接透過使用者介面或從裝置管理應用程式建立輔助使用者。
  • 帳戶:帳戶包含在使用者內,但不是由使用者定義,使用者也不是由任何給定帳戶定義或連結到任何給定帳戶。使用者和個人資料包含自己獨特的帳戶,但不需要擁有帳戶即可運作。帳戶清單因使用者而異。有關詳細信息,請參閱Account 類別定義。
  • 設定檔:設定檔具有獨立的應用程式數據,但共用一些系統範圍的設定(例如 Wi-Fi 和藍牙)。個人資料是使用者存在的子集,並與之相關。一個使用者可以有多個設定檔。設定檔是透過裝置管理應用程式建立的。設定檔始終與父用戶具有不可變的關聯,該關聯由建立設定檔的使用者定義。設定檔不會在創建使用者的生命週期之外存在。
  • 應用程式:應用程式的資料存在於每個關聯的使用者中。應用程式資料來自同一用戶內的其他應用程式的沙箱。同一用戶內的應用程式可以透過 IPC 相互互動。有關詳細信息,請參閱Android 企業版

使用者類別

Android 裝置管理使用以下類別的使用者。

  • 系統使用者:新增到設備的第一個使用者。除非透過恢復出廠設置,否則系統使用者無法刪除,並且即使其他使用者位於前台也始終在運行。該用戶還具有隻有其可設定的特殊權限和設定。
  • 無頭系統使用者:如果裝置配置為在無頭系統使用者模式下運作(透過設定ro.fw.mu.headless_system_user=true ),則新增至裝置的第一個使用者。無頭系統使用者始終在背景運行,因此此類裝置需要額外的前台使用者才能實現使用者互動。
  • 次要使用者:除系統使用者外新增至裝置的任何使用者。輔助使用者可以被刪除(由自己或管理員使用者刪除),並且不會影響裝置上的其他使用者。這些用戶可以在背景運行並繼續擁有網路連線。
  • 訪客使用者:臨時輔助使用者。來賓用戶有一個明確的選項,可以在來賓用戶不再有用時快速刪除該來賓用戶。一次只能有一名訪客使用者。
  • 管理員使用者:有權建立和刪除其他使用者以及控制一些常規多使用者設定的使用者。預設情況下,只有系統使用者是管理員。

設定檔類別

Android 使用以下類別的設定檔:

  • 託管設定檔:由應用程式創建,用於包含工作資料和應用程式。它們由個人資料所有者(創建公司個人資料的應用程式)專門管理。啟動器、通知和最近任務由父用戶和公司設定檔共用。
  • 受限設定檔:使用基於父用戶的帳戶,父用戶可以控制受限設定檔上可用的應用程式。僅適用於平板電腦和電視設備。
  • 複製設定檔: Android 支援建立單獨的複製設定檔使用者類型,以便能夠在裝置上執行單一應用程式的兩個實例。 AOSP 不提供對該功能的端對端支援。 OEM 需要添加自訂功能才能為 Android 用戶提供完整的功能。

使用者類型

Android 11 將上述使用者和設定檔分類制定為明確定義的使用者類型,代表 Android 多使用者功能允許的所有不同類型的使用者和設定檔。

預先定義的AOSP使用者類型在frameworks/base/core/java/android/os/UserManager.java中定義,目前包含:

  • android.os.usertype.full.SYSTEM
  • android.os.usertype.full.SECONDARY
  • android.os.usertype.full.GUEST
  • android.os.usertype.full.DEMO
  • android.os.usertype.full.RESTRICTED
  • android.os.usertype.profile.MANAGED
  • android.os.usertype.system.HEADLESS
  • android.os.usertype.profile.CLONE

OEM 能夠透過覆寫frameworks/base/core/res/res/xml/config_user_types.xml檔案來設定這些使用者類型。這有助於更改每種使用者類型的預設配置,包括其預設限制、圖示、徽章和允許的最大使用者數量。

除了可設定的 AOSP 使用者類型之外,OEM 還可以使用frameworks/base/core/res/res/xml/config_user_types.xml檔案定義新的設定檔類型。這使得 OEM 可以根據需要引入自己的非託管設定檔類型。但是,OEM 有責任根據需要進行平台修改以支援更改,包括修改檢查託管設定檔的任何程式碼以現在處理新的設定檔類型(如果適用)。

啟用多用戶

預設情況下,多用戶功能處於停用狀態。若要啟用功能,設備製造商必須定義資源覆寫來取代frameworks/base/core/res/res/values/config.xml中的下列值:

<!--  Maximum number of supported users -->
<integer name="config_multiuserMaximumUsers">1</integer>
<!--  Whether Multiuser UI should be shown -->
<bool name="config_enableMultiUserUI">false</bool>

若要套用此覆蓋並在裝置上啟用訪客和輔助用戶,請使用 Android 建置系統的DEVICE_PACKAGE_OVERLAYS功能來取代以下值:

  • config_multiuserMaximumUsers的值大於1
  • config_enableMultiUserUItrue

設備製造商可以決定最大用戶數量。如果裝置製造商或其他人修改了設置,他們必須確保簡訊和電話按照Android 相容性定義文件(CDD) 中的定義運作。

管理多個用戶

使用者和設定檔(受限設定檔除外)的管理由以程式設計方式呼叫DevicePolicyManager類別中的 API 來限制使用的應用程式執行。

企業可以使用使用者和設定檔來管理裝置上應用程式和資料的生命週期和範圍,使用上述類型結合DevicePolicyManagerUserManager API 來建立適合其用例的獨特解決方案。

多用戶係統行為

將使用者新增至裝置後,當另一個使用者位於前台時,某些功能會受到限制。由於應用程式資料是按使用者分開的,因此這些應用程式的狀態因使用者而異。例如,發送至目前未追蹤的使用者帳戶的電子郵件將不可用,直到該使用者和帳戶在裝置上處於活動狀態。

注意:若要為輔助用戶啟用或停用電話和簡訊功能,請前往設定 > 用戶,選擇用戶,然後將允許電話和簡訊設定切換為關閉。

當輔助用戶在後台時存在一些限制。例如,後台輔助使用者無法顯示使用者介面或啟動藍牙服務。此外,如果裝置需要額外的記憶體用於前台使用者的操作,系統進程將停止後台輔助使用者。

在 Android 裝置上使用多個使用者時,請記住以下行為:

  • 一次性顯示單一使用者的所有帳戶的通知。
  • 其他用戶的通知只有在啟動後才會顯示。
  • 每個使用者都有一個工作區來安裝和放置應用程式。
  • 任何用戶都無法存取其他用戶的應用程式資料。
  • 任何用戶都可以影響所有用戶已安裝的應用程式。
  • 管理員使用者可以刪除應用程序,甚至可以刪除輔助使用者建立的整個工作區。
  • 預設情況下,退出訪客模式時,訪客使用者會話中的資訊不會保留。如果您希望保留來賓使用者工作階段中的信息,則必須建立資源覆寫文件,將config_guestUserAllowEphemeralStateChange設為false 。有關建立覆蓋文件的更多信息,請參閱使用資源覆蓋自訂建置

Android 汽車多用戶

Android Automotive 依靠 Android 的多用戶實作來提供共享的裝置體驗。

汽車使用者類型

除了上面列出的使用者類型之外,汽車版本對於以下類型的使用者也值得注意:

  • 無頭系統使用者。系統用戶承載所有系統服務。為了支援 Automotive 上的多個用戶,系統用戶也必須是無頭的。只有一名無頭用戶。無頭系統使用者:
    • 必須始終在背景運行。
    • 用戶無法直接刪除或訪問,設備配置除外。例如,使用者無法切換到此使用者類型來執行下載應用程式或新增帳戶等任務。
    • 只能透過恢復出廠設定來清除。
  • 普通用戶。與上面描述的次要使用者相同,除了次要使用者:
    • 不要在背景運行(切換後)。
    • 可以直接透過使用者介面建立。
    • 分離應用程式數據,但共享一些系統範圍的設定。例如,Wi-Fi 和藍牙。

注意事項

以下例外情況適用於無頭系統使用者和汽車領域的常規(二級)使用者:

  • 無頭系統使用者不支援工作設定檔。
  • 預設情況下,常規(次要)使用者擁有通話和簡訊的完全存取權。
  • 預設情況下,常規(輔助)使用者不會在背景執行。

啟用無頭系統用戶

從 Android 10 開始,多用戶功能可用於汽車用例。重要的區別包括:

  • 系統使用者是無頭的,僅在背景運行。
  • 人類使用者不與系統使用者互動。

為了啟用無頭系統用戶,設備製造商必須啟用如上所述的多用戶。

啟用無頭用戶時:
  1. 若要將裝置宣告為 Automotive,請新增功能android.hardware.type.automotive
  2. ro.fw.headless_system_user設為true
  3. config_multiuserMaximumUsers的值設為2 (或更高)。

有關詳細信息,請參閱汽車中的多用戶支援

Android Automotive 多個顯示器上的多用戶

Android 14 中的一項新實驗功能可讓完整的輔助使用者(不是目前前台使用者)啟動活動並存取指派給他們的顯示器上的 UI。此功能使 Android Automotive OS 中的多個並髮用戶能夠支援車內體驗,從而在單一 Android 實例中為多名乘客提供專用的 UI 體驗。

若要啟用此功能以供開發使用,設備製造商必須定義資源覆寫來取代frameworks/base/core/res/res/values/config.xml中的下列值:

<!-- Whether the device allows users to start in background visible on displays.
    Should be false for all devices in production. Can be enabled only for development use
    in automotive vehicles with passenger displays. -->

<bool name="config_multiuserVisibleBackgroundUsers">false></bool>

您可以透過啟用以下附加配置來嘗試僅乘客(無駕駛員)的體驗:

<!-- Whether the device allows users to start in background visible on the default display.
    Should be false for all devices in production. Can be enabled only for development use
    in passenger-only automotive build (i.e., when Android runs in a separate system in the
    back seat to manage the passenger displays).
    When set to true, config_multiuserVisibleBackgroundUsers must also be true. -->

<bool name="config_multiuserVisibleBackgroundUsersOnDefaultDisplay">false</bool>

在 Android 14 中,您可以作為訪客用戶為多名乘客啟用車內體驗。要啟用多個訪客使用者進行開發,設備製造商必須定義資源覆蓋,在frameworks/base/core/res/res/xml/config_user_types.xml中配置允許的最大訪客使用者數量,如下例所示:

<user-types>
   <full-type
       name="android.os.usertype.full.GUEST"
       max-allowed='4'>
       <default-restrictions no_factory_reset="true"
           no_remove_user="true"
           no_modify_accounts="true"
           no_install_apps="true"
           no_install_unknown_sources="true"
           no_uninstall_apps="true"/>
   </full-type>
</user-types>