Android 7.1.1 引入了對零售演示模式的系統級支持,以便客戶可以在零售店檢查正在運行的設備。使用設備所有者應用程序為零售演示設置設備,以確保設備使用僅限於某些演示模式應用程序。最終用戶不得在零售演示設備上添加個人帳戶。 Android 8.1 修改了此支持以通過 DevicePolicyManager createAndManageUser API 創建演示用戶。就演示設備上的用戶管理和設備策略管理而言,這允許對標準零售模式進行更大程度的 OEM 定制。
雖然DevicePolicyManager API 可用於 Android 8.1 之前的版本,但無法使用 8.0 及更早版本中的createAndManageUser API 創建演示類型用戶 ( DevicePolicyManager.MAKE_USER_DEMO
)。
在 Android 8.1 及更高版本中實現
本部分重點介紹平台增強功能並介紹 Android 8.1 及更高版本中的零售演示應用。
平台變化
設置DEVICE_DEMO_MODE
實現基於設備所有者的零售演示模式的設備必須在配置之前將Settings.Global.DEVICE_DEMO_MODE
為 1,以指示正在為零售演示模式配置設備。 SystemServer使用此標誌來管理零售模式的各個方面,例如電源配置文件和 SystemUI。
啟用RetailDemoModeService
在實現零售演示模式的設備中,設置嚮導將全局設置Global.DEVICE_DEMO_MODE
設置為true
以指示設備已進入零售模式。看到此設置後, RetailDemoModeService創建一個演示用戶並在用戶 0 啟動時切換到該用戶,啟用覆蓋資源中指定的自定義啟動器,並禁用 SUW。 System Server 和 SystemUI 也使用此標誌來管理零售模式的各個方面。
設置自定義啟動器或視頻播放器
設備製造商可以通過覆蓋config.xml文件中指定的框架資源config_demoModeLauncherComponent
來指定自定義啟動器,如下所示。
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
位於/packages/apps/RetailDemo的零售演示 DemoPlayer 應用程序是 Android 開源項目 (AOSP) 中的默認自定義啟動器。該應用程序在 /data/preloads/demo/retail_demo.mp4 等設備分區中查找視頻並循環播放。當用戶觸摸屏幕時,自定義啟動器會禁用其活動組件,這會導致默認系統啟動器啟動。
自定義啟動器必須將其自定義組件默認標記為禁用,以便它不會出現在非演示場景中。在演示場景中,System Server 在啟動新的演示會話時啟用指定的config_demoModeLauncherComponent
。
設置嚮導還會查找前面提到的視頻,以提供進入零售模式的啟示。如果視頻不是演示的一部分,則可以修改 SUW 以查找支持零售模式的其他 OEM 特定標誌。如果有系統 A/B 分區,則係統 B 分區必須在 /preloads/demo 包含演示視頻。這會在首次啟動時復製到 /data/preloads/demo。
自定義零售演示模式的預加載應用程序
預加載的應用程序可以通過調用UserManager.isDemoUser()
API 來自定義零售演示模式的體驗,以查看應用程序是否在演示環境中啟動。
在演示用戶中設置了某些限制,類似於阻止應用程序和用戶執行某些操作的受管設備或配置文件策略。這些限制之一是DISALLOW_MODIFY_ACCOUNTS
。有了這個限制, AccountManager和Settings不允許添加帳戶。某些 Google 應用會對此限製做出反應並顯示錯誤消息,而其他應用則不會提示您輸入帳戶(例如 YouTube 和照片)。我們建議 OEM 應用程序還檢查是否設置了DISALLOW_MODIFY_ACCOUNTS
並相應地處理方案。
系統升級
默認情況下,啟用零售模式時,設備策略設置為自動無線 (OTA) 更新。零售設備無需用戶交互即可下載、重啟和安裝更新(考慮電池閾值)。
零售演示應用
基於設備所有者的零售演示模式實施需要將Device Policy Controller應用設置為設備所有者。 AOSP 在/packages/apps/RetailDemo中包含參考 RetailDemo 應用程序實現。
設備所有者應用不需要提升權限或在系統映像上預安裝,並且可以在設置或配置過程中下載。它們大多像傳統應用程序一樣實現,但有以下區別:
所有設備所有者應用程序都必須擴展DeviceAdminReceiver組件,該組件用作所有DevicePolicyManager API 的授權令牌。組件必須持有
android.permission.BIND_DEVICE_ADMIN
權限,包含請求的特殊策略作為元數據,並過濾android.app.action.PROFILE_PROVISIONING_COMPLETE
和android.app.action.DEVICE_ADMIN_ENABLED
意圖。設置為創建特殊演示類型用戶的DevicePolicyManager#MAKE_USER_DEMO標誌是一個隱藏的 API。該標誌的值為常數 0x4。
必須僅通過設備管理角色持有者或ManagedProvisioning應用程序分配設備所有權。
DevicePolicyManager類中的 API 使設備所有者 (DO) 和配置文件所有者 (PO) 能夠實施各種設備策略。下面列出了一些適用於零售演示模式的DevicePolicyManager函數。
創建和管理用戶。
重新啟動設備。
設置 LockTask 允許的包。
通過PackageInstaller安裝包。
阻止軟件包被卸載。
啟用自動系統更新。設備將自動下載並應用 OTA 更新。
禁用鍵盤保護。
防止設置密碼或指紋。
設置一組列入白名單的Settings.Global 、 Settings.Secure和Settings.System設置。
將權限策略設置為
PERMISSION_POLICY_AUTO_GRANT
,它會自動授予所有運行時權限。權限也可以更狹窄地授予:對單個應用程序的單一權限。這不適用於應用操作權限,用戶仍必須在每個用戶、每個應用的基礎上授予這些權限。設置與UserManager中定義的零售模式相關的用戶限制,如下所示。
-
DISALLOW_MODIFY_ACCOUNTS
-
DISALLOW_USB_FILE_TRANSFER
-
DISALLOW_DEBUGGING_FEATURES
-
DISALLOW_CONFIG_WIFI
-
DISALLOW_CONFIG_BLUETOOTH
-
DISALLOW_INSTALL_UNKNOWN_SOURCES
-
DISALLOW_CONFIG_MOBILE_NETWORKS
-
使用網絡更新演示視頻
如果有網絡連接, /packages/apps/RetailDemo中的 RetailDemo 應用程序可以更新演示視頻。可以通過覆蓋 RetailDemo 應用程序中的以下字符串值來配置下載視頻的 URL。
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
如果需要在不同的地區使用不同的視頻,那麼可以使用res/values-*/strings.xml中的 locale-specific 字符串資源來配置不同的下載 URL。例如,如果需要在美國和英國使用不同的視頻,則可以在 res/values-en-rUS/strings.xml 和 res/values-en-rGB/strings.xml 中放置相應的下載 URL ,分別如下所示。
在 res/values-en-rUS/strings.xml 中:
<string name="retail_demo_video_download_url">download URL for US video goes here</string>
在 res/values-en-rGB/strings.xml 中:
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
每次設備重啟時,該視頻最多下載一次。播放設備上的視頻時,RetailDemo 應用程序會在後台檢查是否提供了下載 URL,並且該 URL 上的視頻比正在播放的視頻新。
如果是這樣,RetailDemo 應用程序將下載並開始播放視頻。下載視頻後,它將用於在以後的所有演示會話中播放。在下一次重新啟動之前,不會再次發生任何檢查。
演示視頻指南
演示視頻必須採用縱向佈局,如果是平板電腦,則必須採用設備的自然方向,並且長度可以超過 5 秒。內容不得導致老化,因為它會在顯示時不斷播放。
有關詳細信息,請參閱Android 開發人員對用戶、配置文件和帳戶的定義、設備策略管理器 API 文檔和示例設備所有者應用程序。
驗證
CTS 不涵蓋零售演示模式,因為它是一項可選功能。測試必須手動進行或使用演示應用程序的單元測試進行。
演示會議
演示會話的設置
如果出廠時配置為演示模式,零售演示設備可能會啟動到零售演示模式。或者,零售員工可以直接從設置嚮導啟用零售模式。
圖 2.零售示範模式
顯示演示會話
當設備進入零售模式時,它會切換到新的演示用戶並自動啟動覆蓋資源中指定的自定義啟動器,如實施中所述。默認情況下,此自定義啟動器會重複播放演示視頻,直到用戶觸摸屏幕以開始演示用戶會話。此時,自定義啟動器啟動系統啟動器,然後退出。 OEM 可以更改自定義啟動器,以便在退出時額外啟動另一個服務或活動。
為了保持零售模式的完整性,鍵盤保護被禁用,並且某些可能對零售模式產生不利影響的快速設置操作也被禁止,包括以下內容。
- 飛行模式切換。
- 刪除或修改 Wi-Fi 接入點(設置)。
- 更改運營商(設置)。
- 配置熱點(設置)。
- 用戶切換。
此外,還可以通過禁用以下功能來阻止對某些可能影響零售模式的全局設置的訪問:
- 無線網絡設置。
- 蜂窩網絡配置選項,尤其是熱點。
- 藍牙配置。
- 備份和重置、日期和時間以及移動網絡(它們根本不顯示)。
如果用戶空閒一段時間(默認為 90 秒),零售模式會顯示一個系統對話框,提示用戶退出會話或繼續。如果用戶選擇退出或 5 秒鐘沒有響應,零售模式會刪除當前演示用戶,切換到新的演示用戶,並再次循環播放原始視頻。如果使用電源按鈕關閉屏幕,它會在幾秒鐘後自動重新打開。
退出演示會話後,設備會自行靜音並重置一些全局設置,包括以下內容:
- 亮度
- 自動旋轉
- 手電筒
- 語
- 可訪問性
退出零售演示模式
為了退出零售模式,零售員工必須確保演示設備未在設備管理下註冊,並從引導加載程序恢復出廠設置。