支持多用戶

Android 通過分離用戶帳戶和應用程序數據來支持單個 Android 設備上的多個用戶。例如,父母可以讓他們的孩子使用家庭平板電腦,一家人可以共用一輛汽車,或者一個關鍵響應團隊可以共用一個移動設備進行值班。

術語

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

一般的

Android 設備管理使用以下通用術語。

  • 用戶。每個用戶旨在由不同的自然人使用。每個用戶都有不同的應用程序數據和一些獨特的設置,以及用於在用戶之間顯式切換的用戶界面。當另一個用戶處於活動狀態時,一個用戶可以在後台運行;系統管理關閉用戶以在適當時節省資源。可以直接通過用戶界面或從設備管理應用程序創建二級用戶。
  • 帳戶。帳戶包含在用戶中,但不由用戶定義,用戶也不由任何給定帳戶定義或鏈接到任何給定帳戶。用戶和配置文件包含他們自己的唯一帳戶,但不需要擁有帳戶才能正常工作。帳戶列表因用戶而異。有關詳細信息,請參閱Account 類定義。
  • 簡介。配置文件具有分離的應用程序數據,但共享一些系統範圍的設置(例如,Wi-Fi 和藍牙)。配置文件是用戶存在的子集,並且與用戶的存在相關聯。一個用戶可以有多個配置文件。配置文件是通過設備管理應用程序創建的。配置文件始終具有與父用戶的不可變關聯,由創建配置文件的用戶定義。配置文件在創建用戶的生命週期之後不存在。
  • 應用程序。應用程序的數據存在於每個關聯的用戶中。應用程序數據是從同一用戶內的其他應用程序沙盒化的。同一用戶內的應用程序可以通過 IPC 相互交互。有關詳細信息,請參閱Android for Enterprise

用戶類別

Android 設備管理使用以下類別的用戶。

  • 系統用戶。添加到設備的第一個用戶。系統用戶只能通過恢復出廠設置才能刪除,並且即使其他用戶在前台也始終運行。此用戶還具有隻有它可以設置的特殊權限和設置。
  • 次要用戶。除系統用戶外,任何添加到設備的用戶。二級用戶可以被刪除(他們自己或管理員用戶),並且不能影響設備上的其他用戶。這些用戶可以在後台運行並繼續保持網絡連接。
  • 來賓用戶。臨時二級用戶。訪客用戶有一個明確的選項,可以在訪客用戶用完後快速刪除它。一次只能有一個來賓用戶。
  • 管理員用戶。有權創建和刪除其他用戶以及控制一些常規多用戶設置的用戶。默認情況下,只有系統用戶是管理員。

配置文件類別

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

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 有責任根據需要進行平台修改以支持更改,包括修改任何檢查託管配置文件的代碼,以便現在在適當的情況下處理新的配置文件類型。

啟用多用戶

從 Android 5.0 開始,默認禁用多用戶功能。要啟用該功能,設備製造商必須定義一個資源覆蓋來替換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

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

管理多個用戶

用戶和配置文件的管理(受限配置文件除外)由以編程方式調用DevicePolicyManager類中的 API 以限制使用的應用程序執行。

學校和企業可以使用用戶和配置文件來管理設備上應用程序和數據的生命週期和範圍,使用上述類型以及UserManager API來構建針對其用例量身定制的獨特解決方案。

多用戶系統行為

當用戶被添加到設備時,當另一個用戶在前台時,某些功能會被縮減。由於應用程序數據是按用戶分開的,因此這些應用程序的狀態因用戶而異。例如,在該用戶和帳戶在設備上處於活動狀態之前,發往當前不在焦點的用戶帳戶的電子郵件將不可用。

默認情況下,只有系統用戶才能完全訪問電話和短信。次要用戶可能會收到呼入電話,但不能發送或接收文本。管理員用戶必須為其他用戶啟用這些功能。

注意:要為次要用戶啟用或禁用電話和短信功能,請進入設置 > 用戶,選擇用戶,然後將允許電話和短信設置關閉。

當次要用戶在後台時存在一些限制。例如,後台輔助用戶無法顯示用戶界面或激活藍牙服務。此外,如果設備需要額外的內存用於前台用戶的操作,系統進程將暫停後台二級用戶。

在 Android 設備上僱用多個用戶時,請記住以下行為:

  • 通知會同時針對單個用戶的所有帳戶顯示。
  • 其他用戶的通知在激活之前不會出現。
  • 每個用戶都有一個工作區來安裝和放置應用程序。
  • 沒有用戶可以訪問其他用戶的應用數據。
  • 任何用戶都可以影響所有用戶已安裝的應用程序。
  • 管理員用戶可以刪除應用程序,甚至可以刪除次要用戶建立的整個工作區。

Android 7.0 包含多項增強功能,包括:

  • 切換工作資料。用戶可以禁用他們的託管配置文件(例如在不工作時)。這個功能是通過停止用戶來實現的; UserManagerService 調用ActivityManagerNative#stopUser()
  • 永遠在線的 VPN 。 VPN 應用程序現在可以由用戶、設備 DPC 或託管配置文件 DPC 設置為始終開啟(僅適用於託管配置文件應用程序)。啟用後,應用程序無法訪問公共網絡(對網絡資源的訪問將停止,直到 VPN 已連接並且可以通過它路由連接)。報告device_admin的設備必須實現永遠在線的 VPN。

有關 Android 7.0 設備管理功能的更多詳細信息,請參閱Android for Work

Android 汽車多用戶

Android Automotive 依靠 Android 的多用戶實現來提供共享的設備體驗。

汽車用戶類型

除了上面列出的用戶類型之外,Automotive 構建對於這些類型的用戶來說也是值得注意的:

  • 無頭系統用戶。系統用戶託管所有系統服務。要在 Automotive 上支持多個用戶,系統用戶也必須是無頭的。只有一個無頭用戶。無頭系統用戶:
    • 必須始終在後台運行。
    • 用戶不能直接刪除或訪問,除非是在設備配置的情況下。例如,用戶無法切換到此用戶類型來執行下載應用程序或添加帳戶等任務。
    • 只能通過恢復出廠設置清除。
  • 普通用戶。Secondary Users相同,如上所述,除了次要用戶:
    • 不要在後台運行(在被切換後)。
    • 可以通過用戶界面直接創建。
    • 已分離應用數據,但共享一些系統範圍的設置。例如,Wi-Fi 和藍牙。

注意事項

以下例外情況適用於汽車領域的無頭系統用戶和普通(次要)用戶:

  • 無頭系統用戶不支持工作配置文件。
  • 默認情況下,普通(次要)用戶可以完全訪問電話和短信。
  • 默認情況下,普通(次要)用戶不在後台運行。

啟用無頭系統用戶

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

  • 系統用戶是無頭的,只在後台運行。
  • 人類用戶不與系統用戶交互。

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

啟用無頭用戶時:
  1. 要將設備聲明為 Automotive,請添加功能android.hardware.type.automotive
  2. ro.fw.headless_system_user設置為true
  3. config_multiuserMaximumUsers的值設置為2 (或更高)。

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