W Androidzie 7.1.1 wprowadzono obsługę trybu demo dla sklepów na poziomie systemu, dzięki czemu klienci mogą sprawdzić działanie urządzeń w sklepach. Urządzenia są konfigurowane do trybu demo w sklepie za pomocą aplikacji właściciela urządzenia, aby ograniczyć korzystanie z urządzenia tylko do określonych aplikacji w trybie demo. Użytkownicy nie mogą dodawać konta osobistego na urządzeniu w trybie demo dla sklepów. W Androidzie 8.1 ta obsługa została zmieniona, aby umożliwić tworzenie użytkowników demonstracyjnych za pomocą interfejsu DevicePolicyManager createAndManageUser. Umożliwia to znacznie większe dostosowanie przez producenta OEM standardowego trybu sprzedaży detalicznej pod względem zarządzania użytkownikami i zasadami dotyczącymi urządzenia demonstracyjnego.
Interfejsów API DevicePolicyManager można używać w wersjach starszych niż Android 8.1, ale użytkownicy typu demo (DevicePolicyManager.MAKE_USER_DEMO) nie mogą być tworzeni za pomocą interfejsu API createAndManageUser w wersjach 8.0 i starszych.
Implementacja w Androidzie 8.1 i nowszych wersjach
W tej sekcji opisujemy ulepszenia platformy oraz aplikację w trybie demo dla sklepów w Androidzie 8.1 i nowszych wersjach.
Zmiany na platformie
Ustawienie DEVICE_DEMO_MODE
Urządzenia, które implementują tryb demonstracyjny dla sprzedawców oparty na właścicielu urządzenia, muszą przed udostępnieniem ustawić wartość Settings.Global.DEVICE_DEMO_MODE na 1, aby wskazać, że urządzenie jest udostępniane w trybie demonstracyjnym dla sprzedawców.
SystemServer
używa tego flagi do zarządzania aspektami trybu sprzedaży detalicznej, takimi jak profil zasilania i
interfejs SystemUI.
Włącz RetailDemoModeService
Na urządzeniach z trybem demo dla sklepów kreator konfiguracji ustawia globalne ustawienie Global.DEVICE_DEMO_MODE na true, aby wskazać, że urządzenie weszło w tryb dla sklepów. Gdy RetailDemoModeService zobaczy to ustawienie, utworzy użytkownika demonstracyjnego i przełączy się na niego po uruchomieniu użytkownika 0, włączy niestandardowy program uruchamiający określony w zasobie nakładki i wyłączy SUW. Usługi System Server i SystemUI również używają tego flagi do zarządzania aspektami trybu detalicznego.
Ustawianie niestandardowego programu uruchamiającego lub odtwarzacza wideo
Producenci urządzeń mogą określić niestandardowy program uruchamiający, zastępując zasób platformy config_demoModeLauncherComponent określony w pliku config.xml w ten sposób:
<!-- Component that is the default launcher when Retail Mode is enabled. -->
<string name="config_demoModeLauncherComponent">com.android.retaildemo/.DemoPlayer</string>
Aplikacja DemoPlayer w trybie demo dla sklepów znajdująca się w lokalizacji /packages/apps/RetailDemo jest domyślnym niestandardowym programem uruchamiającym w ramach Projektu Android Open Source (AOSP). Aplikacja wyszukuje film na partycji urządzenia, np. /data/preloads/demo/retail_demo.mp4, i odtwarza go w pętli. Gdy użytkownik dotknie ekranu, niestandardowy program uruchamiający wyłącza swój komponent aktywności, co powoduje uruchomienie domyślnego programu uruchamiającego systemu.
Niestandardowy program uruchamiający musi mieć komponent niestandardowy oznaczony jako domyślnie wyłączony, aby nie pojawiał się w scenariuszach innych niż demonstracyjne. W scenariuszu demonstracyjnym serwer systemowy włącza określony config_demoModeLauncherComponent podczas rozpoczynania nowej sesji demonstracyjnej.
Kreator konfiguracji wyszukuje też wspomniany wcześniej film, aby umożliwić przejście do trybu sprzedaży detalicznej. SUW można zmodyfikować tak, aby szukał innego znaku specyficznego dla producenta OEM, który wskazuje, że tryb sklepowy jest obsługiwany, jeśli film nie jest częścią wersji demonstracyjnej. Jeśli istnieją partycje systemowe A/B, partycja systemowa B musi zawierać film demonstracyjny w folderze /preloads/demo. Zostanie on skopiowany do katalogu /data/preloads/demo przy pierwszym uruchomieniu.
Dostosowywanie wstępnie załadowanych aplikacji w trybie demo dla sklepów
Wstępnie załadowane aplikacje mogą dostosowywać swoje działanie w trybie demonstracyjnym dla sklepów, wywołując interfejs UserManager.isDemoUser()
API, aby sprawdzić, czy aplikacja jest uruchamiana w środowisku demonstracyjnym.
Na koncie użytkownika demonstracyjnego obowiązują pewne ograniczenia, podobne do zasad dotyczących urządzeń zarządzanych lub profili, które uniemożliwiają aplikacjom i użytkownikom wykonywanie określonych operacji.
Jednym z tych ograniczeń jest DISALLOW_MODIFY_ACCOUNTS. W przypadku tego ograniczenia AccountManager i Ustawienia
nie zezwalają na dodawanie kont. Niektóre aplikacje Google reagują na to ograniczenie i wyświetlają komunikat o błędzie, a inne nie proszą o konto (np. YouTube i Zdjęcia). Zalecamy, aby aplikacje OEM sprawdzały też, czy ustawienie DISALLOW_MODIFY_ACCOUNTS jest włączone, i odpowiednio reagowały na tę sytuację.
Aktualizacje systemu
Domyślnie, gdy tryb sprzedaży detalicznej jest włączony, zasady urządzenia są ustawione na automatyczną aktualizację bezprzewodową (OTA). Urządzenia w sprzedaży detalicznej pobiorą aktualizację, uruchomią się ponownie i zainstalują ją (z zachowaniem progów baterii) bez interakcji użytkownika.
Aplikacja trybu demo dla sklepów
Wdrożenie trybu demonstracyjnego w sklepie opartego na właścicielu urządzenia wymaga ustawienia aplikacji Device Policy Controller jako właściciela urządzenia. AOSP zawiera referencyjną implementację aplikacji RetailDemo w /packages/apps/RetailDemo.
Aplikacje właściciela urządzenia nie wymagają podwyższonych uprawnień ani wstępnej instalacji w obrazie systemu i można je pobrać podczas procesu konfiguracji lub udostępniania. Są one wdrażane podobnie jak tradycyjne aplikacje, z tymi różnicami:
Wszystkie aplikacje właściciela urządzenia muszą rozszerzać komponent DeviceAdminReceiver, który służy jako token autoryzacji dla wszystkich interfejsów DevicePolicyManager. Komponent musi mieć uprawnienie
android.permission.BIND_DEVICE_ADMIN, zawierać żądane zasady specjalne jako metadane oraz filtrować intencjeandroid.app.action.PROFILE_PROVISIONING_COMPLETEiandroid.app.action.DEVICE_ADMIN_ENABLED.Flaga DevicePolicyManager#MAKE_USER_DEMO, która jest ustawiana w celu tworzenia specjalnych użytkowników typu demo, jest ukrytym interfejsem API. Ten flag ma stałą wartość 0x4.
Własność urządzenia musi być przypisywana tylko przez osobę pełniącą rolę zarządzania urządzeniami lub aplikację ManagedProvisioning.
Interfejsy API w klasie DevicePolicyManager umożliwiają właścicielowi urządzenia i właścicielowi profilu wymuszanie różnych zasad dotyczących urządzenia. Niektóre funkcje DevicePolicyManager, które mają zastosowanie w trybie demo dla sklepów, są wymienione poniżej.
Tworzenie kont użytkowników i zarządzanie nimi.
Zrestartuj urządzenie.
Ustaw dozwolone pakiety LockTask.
Instaluj pakiety za pomocą instalatora pakietów.
Blokowanie możliwości odinstalowywania pakietów.
Włącz automatyczne aktualizacje systemu. Urządzenia będą automatycznie pobierać i stosować aktualizacje OTA.
Wyłącz ekran blokady.
Uniemożliwianie ustawiania haseł lub odcisków palców.
Ustaw listę dozwolonych ustawień Settings.Global, Settings.Secure i Settings.System.
Ustaw zasady uprawnień na
PERMISSION_POLICY_AUTO_GRANT, co automatycznie przyznaje wszystkie uprawnienia czasu działania. Uprawnienia można też przyznawać w węższym zakresie: pojedyncze uprawnienie do pojedynczej aplikacji. Nie dotyczy to uprawnień app-ops, które użytkownicy muszą nadal przyznawać indywidualnie dla każdego użytkownika i każdej aplikacji.Ustaw ograniczenia użytkownika odpowiednie dla trybu detalicznego zgodnie z definicją w UserManager w ten sposób:
DISALLOW_MODIFY_ACCOUNTSDISALLOW_USB_FILE_TRANSFERDISALLOW_DEBUGGING_FEATURESDISALLOW_CONFIG_WIFIDISALLOW_CONFIG_BLUETOOTHDISALLOW_INSTALL_UNKNOWN_SOURCESDISALLOW_CONFIG_MOBILE_NETWORKS
Aktualizowanie filmu demonstracyjnego w internecie
Aplikacja RetailDemo w folderze /packages/apps/RetailDemo może aktualizować film demonstracyjny, jeśli jest dostępna łączność sieciowa. Adres URL, z którego można pobrać film, można skonfigurować, zastępując w aplikacji RetailDemo ten ciąg znaków:
<!-- URL where the retail demo video can be downloaded from. -->
<string name="retail_demo_video_download_url"></string>
Jeśli w różnych regionach mają być używane różne filmy, można skonfigurować różne adresy URL pobierania, używając zasobów tekstowych specyficznych dla danego języka w pliku res/values-*/strings.xml. Jeśli na przykład w Stanach Zjednoczonych i Wielkiej Brytanii mają być używane różne filmy, odpowiednie adresy URL pobierania można umieścić w plikach res/values-en-rUS/strings.xml i res/values-en-rGB/strings.xml, jak pokazano poniżej.
W pliku res/values-en-rUS/strings.xml:
<string name="retail_demo_video_download_url">download URL for US video goes here</string>W pliku res/values-en-rGB/strings.xml:
<string name="retail_demo_video_download_url">download URL for UK video goes here</string>
Ten film jest pobierany co najwyżej raz po każdym ponownym uruchomieniu urządzenia. Gdy film jest odtwarzany na urządzeniu, aplikacja RetailDemo sprawdza w tle, czy podano adres URL pobierania i czy film pod tym adresem URL jest nowszy od odtwarzanego.
Jeśli tak, aplikacja RetailDemo pobierze i rozpocznie odtwarzanie filmu. Po pobraniu filmu będzie on używany do odtwarzania we wszystkich przyszłych sesjach demonstracyjnych. Żadne z tych sprawdzeń nie zostaną powtórzone do następnego ponownego uruchomienia.
Wskazówki dotyczące filmów demonstracyjnych
Filmy demonstracyjne muszą być w orientacji pionowej lub, w przypadku tabletów, w naturalnej orientacji urządzenia i mogą mieć dowolną długość powyżej 5 sekund. Treści nie mogą powodować wypalenia ekranu, ponieważ będą wyświetlane w sposób ciągły.
Więcej informacji znajdziesz w definicjach użytkowników, profili i kont w dokumentacji dla deweloperów Androida, dokumentacji interfejsu Device Policy Manager API i przykładowej aplikacji właściciela urządzenia.
Weryfikacja
CTS nie obejmuje trybu demonstracyjnego dla sklepów, ponieważ jest to funkcja opcjonalna. Testowanie musi być przeprowadzane ręcznie lub za pomocą testów jednostkowych w przypadku aplikacji w wersji demonstracyjnej.
Sesja demonstracyjna
Konfigurowanie sesji demonstracyjnej
Urządzenia demonstracyjne w sklepach mogą uruchamiać się w trybie demo dla sklepów, jeśli zostały w nim skonfigurowane fabrycznie. Pracownicy sklepów mogą też włączyć tryb sprzedaży detalicznej bezpośrednio w kreatorze konfiguracji.

Rysunek 2. Tryb demo dla sklepów
Wyświetlanie sesji demonstracyjnej
Gdy urządzenie przejdzie w tryb sklepowy, przełączy się na nowego użytkownika demonstracyjnego i automatycznie uruchomi niestandardowy program uruchamiający określony w zasobie nakładki, zgodnie z opisem w sekcji Implementacja. Domyślnie ten niestandardowy program uruchamiający odtwarza film demonstracyjny w pętli, dopóki użytkownik nie dotknie ekranu, aby rozpocząć sesję użytkownika demonstracyjnego. W tym momencie niestandardowy program uruchamiający uruchamia program systemowy, a następnie kończy działanie. Producenci OEM mogą zmodyfikować niestandardowy program uruchamiający, aby dodatkowo uruchamiać inną usługę lub aktywność po wyjściu.
Aby zachować integralność trybu sklepowego, wyłączona jest blokada ekranu. Niektóre działania z szybkich ustawień, które mogłyby negatywnie wpłynąć na tryb sklepowy, są również niedozwolone. Należą do nich m.in. te działania:
- Przełącznik trybu samolotowego.
- usuwanie lub modyfikowanie punktów dostępu Wi-Fi (Ustawienia);
- Zmiana operatora (Ustawienia).
- Konfigurowanie hotspota (Ustawienia).
- Przełączanie użytkowników.
Dodatkowo blokowany jest dostęp do niektórych ustawień globalnych, które mogą wpływać na tryb sklepowy. W tym celu wyłączane są te funkcje:
- Ustawienia Wi-Fi.
- opcje konfiguracji sieci komórkowych, zwłaszcza hotspotów;
- Konfiguracja Bluetootha.
- Kopia zapasowa i resetowanie, Data i godzina oraz Sieci komórkowe (w ogóle się nie wyświetlają).
Jeśli użytkownik jest nieaktywny przez pewien czas (domyślnie 90 sekund), tryb sprzedaży detalicznej wyświetla okno systemowe z prośbą o zakończenie sesji lub kontynuowanie. Jeśli użytkownik zdecyduje się wyjść lub jeśli przez 5 sekund nie będzie żadnej reakcji, tryb sprzedaży detalicznej usunie bieżącego użytkownika demonstracyjnego, przełączy się na nowego i ponownie odtworzy oryginalny film. Jeśli ekran zostanie wyłączony za pomocą przycisku zasilania, po kilku sekundach włączy się automatycznie.
Po zakończeniu sesji demonstracyjnej urządzenia wyciszają się i resetują niektóre ustawienia globalne, w tym:
- Jasność
- Automatyczne obracanie
- Latarka
- Język
- Ułatwienia dostępu
Wyłączanie trybu demo dla sklepów
Aby wyjść z trybu sprzedaży detalicznej, pracownicy sklepów muszą upewnić się, że urządzenie demonstracyjne nie jest zarejestrowane w zarządzaniu urządzeniami, i przywrócić ustawienia fabryczne urządzenia z poziomu programu rozruchowego.