Android 7.1.1 推出系統層級的零售商示範模式支援功能,方便消費者在零售商店中查看裝置的實際運作情況。裝置會使用裝置擁有者應用程式設定為零售展示模式,確保裝置只能使用特定展示模式應用程式。零售商展示模式裝置不得允許使用者新增個人帳戶。Android 8.1 修訂了這項支援,可透過 DevicePolicyManager createAndManageUser API 建立示範使用者。這可讓 OEM 在示範裝置上,針對使用者管理和裝置政策管理,對標準零售模式進行大幅自訂。
雖然 Android 8.1 之前的版本可以使用 DevicePolicyManager API,但 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。SystemServer 和 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) 中尋找影片,並循環播放。使用者輕觸螢幕時,自訂啟動器會停用活動元件,導致預設系統啟動器啟動。
自訂啟動器必須將自訂元件預設標示為已停用,這樣才不會在非展示情境中顯示。在示範情境中,系統伺服器會在啟動新的示範工作階段時啟用指定的 config_demoModeLauncherComponent。
設定精靈也會尋找上述影片,提供進入零售模式的介面。如果影片不屬於展示內容,可以修改 SUW,尋找其他 OEM 專屬的零售模式支援信號。如有系統 A/B 分割區,系統 B 分割區必須包含 /preloads/demo 中的示範影片。首次開機時,這會複製到 /data/preloads/demo。
自訂零售商展示模式的預載應用程式
預先載入的應用程式可以呼叫 UserManager.isDemoUser() API,查看應用程式是否在展示環境中啟動,藉此自訂零售展示模式的體驗。
試用使用者會受到某些限制,類似於受管理裝置或設定檔政策,可防止應用程式和使用者執行特定作業。其中一項限制是 DISALLOW_MODIFY_ACCOUNTS。這項限制會導致 AccountManager 和「設定」不允許新增帳戶。部分 Google 應用程式會因這項限制而顯示錯誤訊息,其他應用程式則不會提示您登入帳戶 (例如 YouTube 和 Google 相簿)。建議 OEM 應用程式也檢查是否已設定 DISALLOW_MODIFY_ACCOUNTS,並據此處理相關情況。
系統更新
根據預設,啟用零售模式後,裝置政策會設為自動無線更新 (OTA)。零售裝置會下載、重新啟動並安裝更新 (符合電池電量門檻),無需使用者互動。
零售商展示應用程式
如要實作以裝置擁有者為基礎的零售展示模式,必須將裝置政策控制器應用程式設為裝置擁有者。Android 開放原始碼計畫 (AOSP) 包含 /packages/apps/RetailDemo 中的 RetailDemo 參考應用程式實作。
裝置擁有者應用程式不需要提高權限或預先安裝在系統映像檔中,可以在設定或佈建程序中下載。這類應用程式的實作方式與傳統應用程式大致相同,但有以下差異:
所有裝置擁有者應用程式都必須擴充 DeviceAdminReceiver 元件,做為所有 DevicePolicyManager API 的授權權杖。這個元件必須持有
android.permission.BIND_DEVICE_ADMIN權限,並將要求的特殊政策納入中繼資料,以及篩除android.app.action.PROFILE_PROVISIONING_COMPLETE和android.app.action.DEVICE_ADMIN_ENABLEDIntent。DevicePolicyManager#MAKE_USER_DEMO 旗標用於建立特殊示範類型使用者,屬於隱藏版 API。這個標記的值為常數 0x4。
裝置擁有權只能透過裝置管理角色持有人或 ManagedProvisioning 應用程式指派。
DevicePolicyManager 類別中的 API 可讓裝置擁有者 (DO) 和設定檔擁有者 (PO) 強制執行各種裝置政策。以下列出適用於零售示範模式的部分 DevicePolicyManager 函式。
建立及管理使用者。
重新啟動裝置。
設定 LockTask 允許的套件。
透過 PackageInstaller 安裝套件。
禁止解除安裝套件。
啟用自動系統更新。裝置會自動下載並套用無線更新。
停用 Keyguard。
禁止設定密碼或指紋。
設定允許的 Settings.Global、Settings.Secure 和 Settings.System 設定。
將權限政策設為
PERMISSION_POLICY_AUTO_GRANT,系統會自動授予所有執行階段權限。權限也可以更精細地授予:單一應用程式的單一權限。這不適用於應用程式作業權限,使用者仍須逐一授予每個應用程式的權限。根據 UserManager 定義,設定與零售模式相關的使用者限制,如下所示。
DISALLOW_MODIFY_ACCOUNTSDISALLOW_USB_FILE_TRANSFERDISALLOW_DEBUGGING_FEATURESDISALLOW_CONFIG_WIFIDISALLOW_CONFIG_BLUETOOTHDISALLOW_INSTALL_UNKNOWN_SOURCESDISALLOW_CONFIG_MOBILE_NETWORKS
透過網頁更新示範影片
/packages/apps/RetailDemo 中的 RetailDemo 應用程式可在連上網路時更新示範影片。如要設定影片下載網址,請在 RetailDemo 應用程式中覆寫下列字串值。
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
如果不同地區需要使用不同影片,請在 res/values-*/strings.xml 中使用語言代碼專屬的字串資源,設定不同的下載網址。舉例來說,如果美國和英國需要使用不同的影片,則對應的下載網址可以分別放在 res/values-en-rUS/strings.xml 和 res/values-en-rGB/strings.xml 中,如下所示。
在 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 應用程式會在背景檢查是否提供下載網址,以及該網址的影片是否比目前播放的影片新。
如果可以,RetailDemo 應用程式會下載並開始播放影片。影片下載完成後,就會用於日後的所有試播工作階段。下次重新啟動前,系統不會再次執行任何檢查。
示範影片規範
示範影片必須採用直向版面配置,如果是平板電腦,則必須採用裝置的自然螢幕方向,長度可超過 5 秒。內容不得導致螢幕烙印,因為螢幕顯示時會持續播放內容。
詳情請參閱 Android 開發人員定義的使用者、設定檔和帳戶,以及 Device Policy Manager API 說明文件和裝置擁有者應用程式範例。
驗證
零售示範模式是選用功能,因此 CTS 不會涵蓋這項功能。測試必須手動進行,或使用試用版應用程式的單元測試。
示範課程
設定試用工作階段
如果零售展示裝置已在出廠時設定為展示模式,可能會啟動零售展示模式。或者,零售員工也可以直接透過設定精靈啟用零售模式。

圖 2. 零售展示模式
顯示示範工作階段
裝置進入零售模式後,會切換至新的試用使用者,並自動啟動疊加資源中指定的自訂啟動器,如「實作」一節所述。根據預設,這個自訂啟動器會重複播放示範影片,直到使用者輕觸螢幕開始示範使用者工作階段為止。屆時,自訂啟動器會啟動系統啟動器,然後結束。原始設備製造商可以變更自訂啟動器,在結束時額外啟動其他服務或活動。
為維護零售模式的完整性,系統會停用 Keyguard,並禁止從「快速設定」執行可能對零售模式造成負面影響的特定動作,包括:
- 飛航模式切換按鈕。
- 移除或修改 Wi-Fi 存取點 (設定)。
- 更換電信業者 (「設定」)。
- 設定無線基地台 (設定)。
- 切換使用者。
此外,系統也會封鎖部分可能影響零售模式的通用設定,方法是停用下列項目:
- Wi-Fi 設定。
- 行動網路設定選項,尤其是無線基地台。
- 藍牙設定。
- 「備份與重設」、「日期與時間」和「行動網路」(完全不會顯示)。
如果使用者閒置一段時間 (預設為 90 秒),零售模式會顯示系統對話方塊,提示使用者結束工作階段或繼續。 如果使用者選擇退出,或五秒內沒有回應,零售模式就會移除目前的試用使用者、切換至新的試用使用者,並再次循環播放原始影片。如果使用電源鍵關閉螢幕,螢幕會在幾秒後自動開啟。
結束試用後,裝置會自動靜音並重設部分全域設定,包括:
- 亮度
- 自動旋轉
- 手電筒
- 語言
- 無障礙設定
退出零售展示模式
如要退出零售模式,零售員工必須確認展示裝置未註冊裝置管理,並從系統啟動載入程式將裝置恢復原廠設定。