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。系統伺服器和 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 和相片) 則不會提示使用者登入帳戶。建議原始設備製造商 (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。
裝置擁有權只能透過裝置管理角色持有人或 Managed Provisioning 應用程式指派。
DevicePolicyManager 類別中的 API 可讓裝置擁有者 (DO) 和設定檔擁有者 (PO) 強制執行各種裝置政策。以下列出部分適用於零售商示範模式的 DevicePolicyManager 函式。
建立及管理使用者。
重新啟動裝置。
設定 LockTask 允許使用的套件。
透過 PackageInstaller 安裝套件。
禁止解除安裝套件。
啟用自動更新功能。裝置會自動下載及套用無線更新。
停用鍵盤鎖。
禁止設定密碼或指紋。
設定一組已加入許可清單的 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 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 應用程式會下載並開始播放影片。影片下載完成後,日後的所有示範工作階段都會使用這部影片。下次重新啟動之前,系統不會再次執行任何檢查。
示範影片規範
示範影片必須採用直向版面配置,如果是平板電腦,則必須採用裝置的自然方向,長度可超過五秒。內容必須不會造成螢幕烙印,因為內容會在螢幕上持續播放。
詳情請參閱使用者、設定檔和帳戶的 Android 開發人員定義、Device Policy Manager API 說明文件和裝置擁有者應用程式範例。
驗證
CTS 不涵蓋零售商示範模式,因為這是選用功能。您必須手動測試或使用單元測試來測試試用版應用程式。
示範課程
示範工作階段設定
如果零售商展示裝置是從工廠設定為展示模式,可能會在開機時進入零售商展示模式。或者,零售店員工也可以直接透過設定精靈啟用零售模式。
圖 2. 零售商展示模式
顯示示範工作階段
裝置進入零售模式時,會切換至新的示範使用者,並自動啟動疊加資源中指定的自訂啟動器,如實作一節所述。根據預設,這個自訂啟動器會重複播放示範影片,直到使用者輕觸螢幕開始示範使用者工作階段為止。屆時,自訂啟動器會啟動系統啟動器,然後退出。OEM 可以變更自訂啟動器,在退出時額外啟動其他服務或活動。
為維持零售模式的完整性,我們已停用鍵盤保護功能,並禁止使用可能會對零售模式造成不利影響的特定快速設定動作,包括以下動作:
- 飛航模式切換鈕。
- 移除或修改 Wi-Fi 存取點 (設定)。
- 變更電信業者 (設定)。
- 設定無線基地台 (設定)。
- 正在切換使用者。
此外,也會透過停用下列項目,封鎖部分會影響零售模式的全域設定存取權:
- Wi-Fi 設定。
- 行動網路設定選項,特別是熱點。
- 藍牙設定。
- 「備份與重設」、「日期與時間」和「行動網路」(完全不會顯示)。
如果使用者閒置一段時間 (預設為 90 秒),零售模式會顯示系統對話方塊,提示使用者要退出工作階段或繼續。如果使用者選擇退出,或等候五秒無回應,零售模式就會移除目前的示範使用者、切換至新的示範使用者,然後再循環播放原始影片。如果使用電源鍵關閉螢幕,螢幕會在幾秒後自動開啟。
退出展示時段後,裝置會自動靜音並重設部分全域設定,包括:
- 亮度
- 自動旋轉
- 手電筒
- 語言
- 無障礙設定
結束零售商展示模式
如要退出零售模式,零售員工必須確保示範裝置並未註冊裝置管理,並從系統啟動載入程式將裝置恢復原廠設定。